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

时间:2017-07-06 00:02:45

标签: 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服务器记录到日志文件后,我发现它实际上只传递了第一个id。

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

3 个答案:

答案 0 :(得分:1)

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

 let list = [1, 2, 3];
 let Query = `DELETE FROM Table WHERE id IN (${list})`;
 connection.query(Query, function (err, result) {
     `enter code here`
 };

答案 1 :(得分:0)

读入https://github.com/mysqljs/mysql#performing-queries的文档(如果使用此lib连接mysql)

 let list =[1,2,..];
 let Query = 'DELETE FROM Table WHERE id IN (?)';
 // values param need is a array of value to binding to "?"
 // you can try [list.toString()] if the block above not working
 connection.query(Query,[list], function (err, result) {
     `enter code here`
 };

答案 2 :(得分:0)

很遗憾,?占位符不能与IN运算符一起使用。因此,您应该转义这些值。假设list变量来自外部来源;因此,为了防止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: Cannot read property 'config' of undefined