Node.js 使用sql通配符的命名参数绑定不起作用
我正在使用node-sqlite3包访问我的数据库。 我正在尝试使用以下代码从客户机表中获取行:Node.js 使用sql通配符的命名参数绑定不起作用,node.js,sqlite,Node.js,Sqlite,我正在使用node-sqlite3包访问我的数据库。 我正在尝试使用以下代码从客户机表中获取行: var st = db.prepare("SELECT * FROM Clients where name LIKE '%$name%'"); st.all({ $name: "test" }, function (err, rows) { console.log("this: " + JSON.stringify(this)); if (err) conso
var st = db.prepare("SELECT * FROM Clients where name LIKE '%$name%'");
st.all({ $name: "test" }, function (err, rows) {
console.log("this: " + JSON.stringify(this));
if (err)
console.log(err);
else {
console.log("found: " + JSON.stringify(rows));
}
});
err的输出如下所示:
{ [Error: SQLITE_RANGE: bind or column index out of range] errno: 25, code: 'SQLITE_RANGE' }
当我将sql更改为从名称为“%$name%”的客户端中选择*时,查询可以工作,并且不会引发错误。所以我想问题是,node-sqlite3试图在作为第一个参数传递给Statementall的对象中找到一个名为$name%或类似的变量。
我已经搜索了更多关于这方面的提示,但没有找到任何
我需要逃避什么吗?如何让查询使用命名绑定和sql通配符%?这不是绑定的工作方式 你可以
SELECT * FROM Clients where name LIKE $name
及
绑定变量作为一个整体变量与后端数据库协商,您不应该将其与变量替换混淆
您还应该能够使用未测试的sqlite的concatenate函数:
SELECT * FROM Clients where name LIKE '%'||$name||'%'
..
{ $name: test }
这不是绑定的工作方式 你可以
SELECT * FROM Clients where name LIKE $name
及
绑定变量作为一个整体变量与后端数据库协商,您不应该将其与变量替换混淆
您还应该能够使用未测试的sqlite的concatenate函数:
SELECT * FROM Clients where name LIKE '%'||$name||'%'
..
{ $name: test }
sqlite concat版本对我来说似乎是最好的,而且它很有效。谢谢:sqlite concat版本对我来说似乎是最好的,而且很有效。谢谢: