Правильное экранирование node-mysql для массовых удалений с уникальными критериями
Я пытаюсь подготовить этот запрос с помощью node-mysql.
Документы node-mysql предполагают, что вложенные массивы, например, [[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 ?
но это приводит к синтаксической ошибке. Что такое правильное форматирование / экранирование, чтобы этот запрос работал?
1 ответ
Так что я понял это некоторое время назад и подумал, что опубликую свой ответ здесь. Оказывается, вы должны обернуть значения в другом массиве. Итак, ваш запрос будет выглядеть так:
var sql = DELETE FROM collection_post WHERE (post_id, collection_id) IN (?);
и ваши ценности должны выглядеть так:
var values = [[[170, 2], [170, 7]]];