node-mysql 为具有唯一标准的批量删除进行适当的转义
node-mysql proper escaping for bulk deletes with unique criteria
我正在尝试使用 node-mysql.
准备 this 查询
节点-mysql docs 建议嵌套数组,例如[[1, 2], [3, 4]]
被转换为分组列表,例如(1, 2), (3, 4)
。按照这些思路,我按如下方式设置查询:
var sql = DELETE FROM collection_post WHERE (post_id, collection_id) IN (?)
var values = [[170, 2], [170, 7]]; // Generated programmatically.
根据node-mysql中指定的规则,当我运行
connection.query(sql, values, callback);
我假设结果查询是:
DELETE FROM collection_post WHERE (post_id, collection_id) IN ((170, 2), (170, 7))
但是当我实际执行查询时,我得到了这个:
ER_OPERAND_COLUMNS: Operand should contain 2 column(s)
我尝试从 sql 语句中删除括号,例如
var sql = DELETE FROM collection_post WHERE (post_id, collection_id) IN ?
但这会导致语法错误。使此查询正常工作的正确格式/转义是什么?
所以我不久前就想出了这个问题,并认为我会 post 在这里回答我的问题。事实证明,您必须将这些值包装在另一个数组中。所以您的查询将如下所示:
var sql = DELETE FROM collection_post WHERE (post_id, collection_id) IN (?);
并且您的值需要如下所示:
var values = [[[170, 2], [170, 7]]];
我正在尝试使用 node-mysql.
准备 this 查询节点-mysql docs 建议嵌套数组,例如[[1, 2], [3, 4]]
被转换为分组列表,例如(1, 2), (3, 4)
。按照这些思路,我按如下方式设置查询:
var sql = DELETE FROM collection_post WHERE (post_id, collection_id) IN (?)
var values = [[170, 2], [170, 7]]; // Generated programmatically.
根据node-mysql中指定的规则,当我运行
connection.query(sql, values, callback);
我假设结果查询是:
DELETE FROM collection_post WHERE (post_id, collection_id) IN ((170, 2), (170, 7))
但是当我实际执行查询时,我得到了这个:
ER_OPERAND_COLUMNS: Operand should contain 2 column(s)
我尝试从 sql 语句中删除括号,例如
var sql = DELETE FROM collection_post WHERE (post_id, collection_id) IN ?
但这会导致语法错误。使此查询正常工作的正确格式/转义是什么?
所以我不久前就想出了这个问题,并认为我会 post 在这里回答我的问题。事实证明,您必须将这些值包装在另一个数组中。所以您的查询将如下所示:
var sql = DELETE FROM collection_post WHERE (post_id, collection_id) IN (?);
并且您的值需要如下所示:
var values = [[[170, 2], [170, 7]]];