Запрос SELECT с условием IN от узла до коннектора MariaDB всегда возвращает одну строку - PullRequest
0 голосов
/ 14 октября 2019

Я хочу получить несколько записей пользователя из MariaDB:

const mariadb = require('mariadb');
const pool = mariadb.createPool(...);
const conn = await pool.getConnection();
const query = `SELECT * FROM user WHERE id IN (?)`;
const rows = await conn.query(query, [requestTargets]);

, где requestTargets - это строка идентификаторов, таких как '123,124,125'

Проблема в том, что это приводит к типу массива 'Строки 'с одним элементом - пользователь с идентификатором, который является первым в requestTargets.

Я попытался сделать тот же запрос от phpmyadmin, и он вернул верный результат нескольких записей.

I'Мы пытались передать requestTargets в другом формате для запроса (в виде массива целых или строк), но это привело к ошибкам SQL.

Что может быть не так?

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Привязка списка к предложению IN(), вероятно, не обрабатывается ни в одном соединителе.

Если id является числовым, то вам нужно получить IN (123,124);это нет кавычек.

Если это строка, то вам нужно много строк: IN ('ab', 'cde')

0 голосов
/ 14 октября 2019

Попробуйте отправить массив из массива в качестве параметра.

Пример:

const mariadb = require('mariadb');
const pool = mariadb.createPool(...);
const conn = await pool.getConnection();
const query = `SELECT * FROM user WHERE id IN (?)`;
const rows = await conn.query(query, [[requestTargets]]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...