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]]];