Javascript 如何将ID列表传递给mysql从NodeJs删除查询
我需要使用列表中的where子句(id1,id2..)执行多行删除查询 但由于JS中没有列表,我在将参数传递到查询时遇到了问题。以下是我的代码: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服务器记
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
};