@mysql/xdevapi не разрешает параметры массива для запроса WHERE field IN (?)

Я использую пакет npm @mysql/xdevapi с локальной установкой mysql-8.0.15-winx64. Я пытаюсь выполнить строку SQL с параметрами. Запрос ищет записи, в которых идентификатор находится В массиве.

const sql = "SELECT * FROM table WHERE id IN (?)";
const params = [[1,2]];
const result = await session.sql(sql).bind(params).execute();

и я получаю следующую ошибку

Error: Invalid data, expecting scalar
    at SqlResultHandler.BaseHandler.(anonymous function) (C:\...\@mysql\xdevapi\lib\Protocol\ResponseHandlers\BaseHandler.js:110:19)
    at Array.entry (C:\...\@mysql\xdevapi\lib\Protocol\ResponseHandlers\BaseHandler.js:87:29)
    at WorkQueue.process (C:\...\@mysql\xdevapi\lib\WorkQueue.js:75:19)
    at Client.handleServerMessage (C:\...\@mysql\xdevapi\lib\Protocol\Client.js:198:21)
    at Client.handleNetworkFragment (C:\...\@mysql\xdevapi\lib\Protocol\Client.js:242:14)
    at TLSSocket.stream.on.data (C:\...\@mysql\xdevapi\lib\Protocol\Client.js:89:36)
    at emitOne (events.js:116:13)
    at TLSSocket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11) info: [Object] } ],

Это работает, если я просто передаю sql SELECT * FROM table WHERE id IN (1,2), возвращая две записи.

Если я передаю один параметр со строкой, разделенной запятыми, поэтому const params = ["1,2"] затем он возвращает только первую запись.

Я не могу найти в документации ничего, подтверждающего это, и не могу найти способ обойти это.

1 ответ

Решение

Вам необходимо предоставить заполнитель для каждого значения в массиве. В вашем случае оператор SQL в конечном итоге должен быть:

const sql = "SELECT * FROM table WHERE id IN (?, ?)";
const params = [1, 2];
const result = await session.sql(sql).bind(params).execute();

Вы можете найти более подробную информацию здесь.

Отказ от ответственности: я ведущий разработчик коннектора MySQL X DevAPI для Node.js

Другие вопросы по тегам