我需要使用列表中的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,但两者都不起作用。答案 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