我有一个简单的查询,我想传递一个包含5个项目的数组。我正在使用mysql
模块,所以我知道它可以完成,但我没有正确执行synatx,因此出现语法错误。
以下是查询:
`UPDATE table1 SET table1.col=0 WHERE (table1.col2) IN = (?) AND table1.id=(SELECT ...);`,[arr]
//arr = [1,2,3,4,5];
我试过了:
`UPDATE table1 SET table1.col=0 WHERE (table1.col2) IN = (?,?,?,?,?) AND table1.id=(SELECT ...);`,[arr]`
但我仍然遇到语法错误。
答案 0 :(得分:2)
IN()
谓词的语法不使用=
。
WHERE (table1.col2) IN = (?,?,?,?,?)
应该是
WHERE table1.col2 IN (?,?,?,?,?)
提示:您可以(并且应该)自己在文档中检查语法,这样您就可以比发布到Stack Overflow更容易获得答案。
https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_in
答案 1 :(得分:2)
就我而言,需要数组内部的数组才能使其正常工作。只是数组变量作为参数只传递第一个数字给 sql。
这是一个例子:(注意数组中的 ids 作为第二个参数)
var sql = "SELECT * FROM table WHERE ID IN (?)";
var ids = [1,2,3];
pool.query(sql, [ids], function (err, result, fields) {
if(err) {
console.log(err);
}
else {
console.log(result);
}
}
答案 2 :(得分:0)
再加上Bill Karwin的回答,您还可以将数组传递给针对'?'的MySQL查询占位符的方式相同
WHERE table1.col2 IN (?)
//arr = [1,2,3,4,5];
将arr与查询一起传递会将其转换为所需的SQL字符串。 mysql模块在内部使用'sqlstring'模块中的'SqlString.arrayToList'函数进行转换: https://github.com/mysqljs/sqlstring/blob/8f193cae10a2208010102fd50f0b61e869e14dcb/lib/SqlString.js#L60