Параметры NodeJS, sqlite3 и WHERE IN - PullRequest
1 голос
/ 05 июня 2019

Поддерживает ли библиотека sqlite3 для NodeJS параметры для WHERE IN запросов?

У меня есть следующая небольшая программа.

const sqlite3 = require('sqlite3');
const db = new sqlite3.Database('./data/data.db');

const sql = `
    SELECT * FROM accounts
    WHERE
        name IN ('Business Expense - Internet Service','RCSB Checking')`;

db.all( sql,
        function getAccout(error, rows) {
            console.log(error);
            console.log(rows);
        });

Программа "работает". Он запрашивает базу данных, и переменная rows успешно заполняется данными из двух отдельных строк.

Однако я не хочу жестко закодированных значений. Я хочу параметризировать свои значения. Следующий код работает для этого.

const sql = `
    SELECT * FROM accounts
    WHERE
        name = ? OR name = ?`;

db.all( sql,
        ['Business Expense - Internet Service','RCSB Checking'],
        function getAccout(error, rows) {
            console.log(error);
            console.log(rows);
        });

Однако я хочу, чтобы это работало с любым числом имен. я хочу параметризовать исходный запрос WHERE IN. Тем не менее, следующая программа

const sql = `
    SELECT * FROM accounts
    WHERE
        name IN (?)`;

db.all( sql,
        [['Business Expense - Internet Service','RCSB Checking']],
        function getAccout(error, rows) {
            console.log(error);
            console.log(rows);
        });

не работает. Он работает без ошибок, но возвращает ноль строк. Я также попытался использовать объединенную строку в качестве параметра

const sql = `
    SELECT * FROM accounts
    WHERE
        name IN (?)`;

db.all( sql,
        ["'Business Expense - Internet Service','RCSB Checking'"],
        function getAccout(error, rows) {
            console.log(error);
            console.log(rows);
        });

и это тоже не сработало.

Поддерживает ли библиотека sqlite3 параметризацию запросов WHERE IN? Если так, какой синтаксис для этого? Если нет, есть ли общие способы решения этой проблемы в сообществе NodeJS?

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Я не знаю, есть ли поддержка для этого, но в случае, если нет

const params = [...]
const sql = `
    SELECT * FROM accounts
    WHERE
        name IN (${new Array(params.length).fill('?').join(',')})`;
0 голосов
/ 07 июня 2019

Я собирался также предложить использовать строковые литералы JS.Похоже на «узловой способ» ведения дел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...