javascript - caracter - string definicion



matriz javascript como una lista de cadenas(preservando comillas) (4)

Almacena las citas:

var names = ["'item1'","'item1'","'item3'"];
alert('IN (' + names[1] + ')'); // IN ('item1')

https://src-bin.com

Tengo una serie de cadenas. Cuando uso .toString () para mostrarlo, las comillas no se conservan. Esto dificulta la construcción de la consulta mysql usando un "in". Considera lo siguiente:

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

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

Debe haber una solución simple que estoy pasando por alto aquí.


Answer #1

La solución simple es agregar las citas usted mismo

for(var i=0; i<items.length; i++){
    items[i] = "'" + items[i] + "'";
}

var list_with_quotes = items.join(",");

Tenga en cuenta que aquí ignoro completamente los problemas de inyección de SQL.


Answer #2

Use Array.map para envolver cada elemento con comillas:

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

El código se simplifica con las funciones de ES6: funciones de flecha y cadenas de plantillas (implementadas en node.js 4.0 y superior):

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

También puede utilizar listas blancas para evitar inyecciones de SQL:

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

items
   .filter(i => validItems.has(i))
   .map(i => `'${i}'`)
   .join(',')

Answer #3
let keys = ['key1','key2']
let keyWithQoutes = keys.map((it) => {return `'${it}'`})
let sql = `SELECT .... FROM ... WHERE id IN (${keyWithQoutes})`
console.log(sql)

salida: "SELECT .... FROM ... WHERE id IN ('key1', 'key2')"





node.js