node-mysql 转义查询值 - 长度未知的数组

node-mysql escaping query values - array with unknown length

我使用 node.js 和模块 node-mysql 连接到 mySQL 服务器。但是,当我试图在查询中转义数组时遇到了一些问题。这是我的代码:

connection.query("select * from table where id in (?)", [1, 3, 5], function(err, res) {
    ...
});

上面的查询是select * from table where id in (1),这不是我的预期。

如文件所述:

Arrays are turned into list, e.g. ['a', 'b'] turns into 'a', 'b'

我知道 select * from table where id in (?,?,?) 有效。问题是,如果我有一个未知长度的数组怎么办?

一种解决方案是嵌套数组,以便将其正确转换为列表:

connection.query("select * from table where id in (?)", [[1, 3, 5]], ...);

另一种解决方案是动态生成 ?。例如:

var values = [1, 3, 5];
var query = "select * from table where id in ("
            + new Array(values.length + 1).join('?,').slice(0, -1)
            + ")";
connection.query(query, values, function(err, res) {
    ...
});

使用ES6,您可以将第二种解决方案中的列表创建简化为:

'?,'.repeat(values.length).slice(0, -1)