Javascript 如何将ID列表传递给mysql从NodeJs删除查询

Javascript 如何将ID列表传递给mysql从NodeJs删除查询,javascript,mysql,node.js,Javascript,Mysql,Node.js,我需要使用列表中的where子句(id1,id2..)执行多行删除查询 但由于JS中没有列表,我在将参数传递到查询时遇到了问题。以下是我的代码: let list =[1,2,..]; let Query = 'DELETE FROM Table WHERE id IN (?)'; connection.query(Query,list, function (err, result) { `enter code here` }; 当我以这种方式传递它时,在将mysql服务器记

我需要使用列表中的where子句(id1,id2..)执行多行删除查询 但由于JS中没有列表,我在将参数传递到查询时遇到了问题。以下是我的代码:

 let list =[1,2,..];
 let Query = 'DELETE FROM Table WHERE id IN (?)';
 connection.query(Query,list, function (err, result) {
     `enter code here`
 };
当我以这种方式传递它时,在将mysql服务器记录到日志文件之后,我看到它实际上只传递第一个id


PS:我试过没有括号?并在列表上执行Array.join,但两者都不起作用。

只需将项目列表附加到查询字符串:

 let list = [1, 2, 3];
 let Query = `DELETE FROM Table WHERE id IN (${list})`;
 connection.query(Query, function (err, result) {
     `enter code here`
 };
读入的文档(如果您使用此库连接mysql)


不幸的是,
占位符不能与IN运算符一起使用。所以你应该逃避这些值。假设
列表
变量来自外部源;因此,为了防止SQL注入,您可以:

// `list` is filled in outside this process
const Query = `DELETE FROM Table WHERE id IN (${list.map((item) => connection.escape(item))})`;
connection.query(Query, function (err, result) {
  // handle error or result here
};
我注意到
list.map(connection.escape)
不起作用并抛出:
TypeError:只要
列表
变量中没有填写来自系统外部的数据,例如用户输入的数据,就无法读取未定义的

的属性'config'。否则,SQL注入将是一个问题。MySQL之所以说“总是转义数据”是有原因的。你不想发现这和@hoangdv写的类似,你需要将所有参数作为数组传递。这正是我想要的。在node mysql2包中运行良好
// `list` is filled in outside this process
const Query = `DELETE FROM Table WHERE id IN (${list.map((item) => connection.escape(item))})`;
connection.query(Query, function (err, result) {
  // handle error or result here
};