NodeJS,sqlite3和WHERE IN参数中

时间:2019-06-04 21:54:26

标签: javascript node.js sqlite

WHERE IN查询的sqlite3 library for NodeJS支持参数吗?

我有以下小程序。

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);
        });

但是,我希望它可以使用 any 个名称。即我要参数化原始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 个答案:

答案 0 :(得分:1)

我不知道是否有支持,但是如果没有支持

const params = [...]
const sql = `
    SELECT * FROM accounts
    WHERE
        name IN (${new Array(params.length).fill('?').join(',')})`;

答案 1 :(得分:0)

我也建议使用JS字符串文字。似乎更像是做事的“节点方式”。