使用nodejs在Mysql查询中传递数组

时间:2017-10-02 23:58:55

标签: mysql arrays node.js

我有一个简单的查询,我想传递一个包含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]`

但我仍然遇到语法错误。

3 个答案:

答案 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