Правильное экранирование 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]]];
Другие вопросы по тегам