У меня есть массив строк. Когда я использую .toString() для его вывода, кавычки не сохраняются. Это затрудняет построение запроса mysql с использованием "in". Рассмотрим следующее:
SELECT * FROM Table WHERE column IN ('item1','item2','item3','item4')
toString is returning: IN (item1,item2,item3,item4)
Должно быть простое исправление, которое я упускаю из виду.
Кавычки не сохраняются, потому что они на самом деле не являются частью строкового значения, они просто необходимы для указания строковых литералов в вашем коде.
Итак, не используйте 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) .)
Используйте 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(',')
Сохраните цитаты:
var names = ["'item1'","'item1'","'item3'"];
alert('IN (' + names[1] + ')'); // IN ('item1')