使用nodejs在Mysql查询中传递数组
Posted
技术标签:
【中文标题】使用nodejs在Mysql查询中传递数组【英文标题】:Pass array in Mysql query with nodejs 【发布时间】:2018-03-14 02:28:50 【问题描述】:我有一个简单的查询,我想传递一个包含 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]`
但我仍然遇到语法错误。
【问题讨论】:
什么语法错误?请在您的问题中包含错误的全文,或编辑以添加它。 好吧,我是个白痴,我忘记了 WHERE 子句中的AND
(我知道它包含在这里),这就是错误,我刚刚看到它并认为它是用于数组但现在你让我看到了,我意识到了,谢谢
【参考方案1】:
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
【讨论】:
我会接受这个答案,因为它确实不使用,我已经在我的代码中删除了它但在这里忘记了,也感谢你的提示:)【参考方案2】:除了 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
【讨论】:
【参考方案3】:在我的情况下,需要数组内部的数组才能使其正常工作。仅将数组变量作为参数仅将第一个数字传递给 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);
【讨论】:
以上是关于使用nodejs在Mysql查询中传递数组的主要内容,如果未能解决你的问题,请参考以下文章