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)
我使用 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)