Javascript 字符串插值以使用数组创建 SQL 查询

Javascript string interpolation to create SQL query with Array

我想创建一个 SQL 查询,查询 select 值在字符串数组中的所有记录。 说我有以下数组

myarray = ['a', 'b', 'c']

我想用它来构建这样的查询

SELECT * FROM my_table WHERE mycol IN ('a', 'b', 'c')

常规字符串插值显然不适用于此。我什至试过 sql-bricks 但显然它不支持 IN with WHERE。

有没有在SQL查询中使用数组的好方法?

let sql = `SELECT * FROM my_table WHERE mycol IN ('${ myarray.join("','") }');`

此外,如果您想删除空值:

let myarray = ['a', 'b', null, 'c']
let sql = `SELECT * FROM my_table WHERE mycol IN ('${ 
myarray.filter(function (el) {
  return el != null;
}).join("','")
 }');`

==>

"SELECT * FROM my_table WHERE mycol IN ('a','b','c');"

此外,为了避免 sql 注入,您应该首先将 myarray 映射到一个数组,其中 ' 已被替换为 ''。

. 即。

let myarray = ['a', 'b', null, 'c', "d'Alambert"]
.filter(function (el) { return el != null; })
.map(function(el){ return el.replace(/'/g, "''");}); 

let sql = `SELECT * FROM my_table WHERE mycol IN ('${ myarray.join("','") }');`