javascript массив как список строк (сохранение кавычек)

У меня есть массив строк. Когда я использую .toString() для его вывода, кавычки не сохраняются. Это затрудняет построение запроса mysql с использованием "in". Рассмотрим следующее:

SELECT * FROM Table WHERE column IN ('item1','item2','item3','item4')

toString is returning: IN (item1,item2,item3,item4)

Должно быть простое исправление, которое я упускаю из виду.

25
задан Peter 13 December 2011 в 06:21
поделиться

3 ответа

Кавычки не сохраняются, потому что они на самом деле не являются частью строкового значения, они просто необходимы для указания строковых литералов в вашем коде.

Итак, не используйте toString(). Вместо этого, один из способов сделать это заключается в следующем:

var arr = ['item1','item2','item3','item4'];

var quotedAndCommaSeparated = "'" + arr.join("','") + "'";

// quotedAndCommaSeparated === "'item1','item2','item3','item4'"

Метод Array.join () возвращает строку, в которой все элементы массива объединены в одну строку с (необязательно) разделитель между каждым элементом. Поэтому, если вы укажете разделитель, который включает кавычки и запятые, вам просто нужно вручную добавить начальную и конечную кавычки для первого и последнего элемента (соответственно).

, пожалуйста, , скажите мне, что вы не используете клиентский JavaScript для формирования своего SQL.)

РЕДАКТИРОВАТЬ: чтобы разрешить пустой массив, включите значение по умолчанию для результирующая строка, в противном случае (как указано пропущенным) строка будет "''":

var newString = arr.length === 0 ? "" : "'" + arr.join("','") + "'";
// default for empty array here ---^^

(может быть более подходящим иметь if (arr.length===0) для выполнения какого-либо другого действия, а не для выполнения инструкции SELECT) .)

66
ответ дан 28 November 2019 в 18:03
поделиться

Используйте Array.map, чтобы заключить каждый элемент в кавычки:

items.map(function(item) { return "'" + item + "'" }).join(',');

Код становится проще с функциями ES6 - функциями стрелок и шаблонными строками (реализовано в node.js 4.0 и выше):

items.map(i => `'${i}'`).join(',');

Вы также можете использовать белый список для предотвращения SQL-инъекций:

const validItems = new Set(['item1', 'item2', 'item3', 'item4']);

items
   .filter(i => validItems.has(i))
   .map(i => `'${i}'`)
   .join(',')
3
ответ дан 28 November 2019 в 18:03
поделиться

Сохраните цитаты:

var names = ["'item1'","'item1'","'item3'"];
alert('IN (' + names[1] + ')'); // IN ('item1')
-2
ответ дан 28 November 2019 в 18:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: