使用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查询中传递数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 mySQL 和 nodejs 传递承诺

如何在nodeJS的mysql查询中将值推送到数组?

nodejs mysql查询数据以循环数组

NodeJs 从 MySQL 查询结果创建新数组

在返回的mysql结果中查找行数(nodejs)

如何在Angular 8中从http客户端传递带有查询对象的数组