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社区是否有共同的解决方法?
答案 0 :(得分:1)
我不知道是否有支持,但是如果没有支持
const params = [...]
const sql = `
SELECT * FROM accounts
WHERE
name IN (${new Array(params.length).fill('?').join(',')})`;
答案 1 :(得分:0)
我也建议使用JS字符串文字。似乎更像是做事的“节点方式”。