javascript - NodeJS、sqlite3 和 WHERE IN 参数
问题描述
NodeJS 的sqlite3
库是否支持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 社区中是否有常见的解决方法?
解决方案
不知道有没有支持,万一没有
const params = [...]
const sql = `
SELECT * FROM accounts
WHERE
name IN (${new Array(params.length).fill('?').join(',')})`;
推荐阅读
- c++ - 关于 vcpkg 和 pcl/visualization 的问题
- javascript - 使用javascript函数提取outlook的邮件正文
- python - 取数据透视表列之间的差异并与上一行中的最后一列进行比较
- ruby-on-rails - Rails 退出循环但没有记录任何内容,即使救援 StandardError 存在 - 谜
- woocommerce - ajax请求后更新购物车总数
- react-native - 反应原生:当方向改变时,在 pagingEnabled ScrollView 中有上一张幻灯片
- java - 锁实现死锁
- node.js - 跨 N 个查询结果的 mongoose populate() 是否会导致对数据库的 N 个额外查询?这对性能有何影响?
- javascript - 使用 jQuery 为 HTML 元素设置多个属性?
- python - 如何让 AWS Device Farm 使用 python 3.x 运行 Appium 测试?