命名参数绑定与sql-wildcard无法正常工作

时间:2015-09-16 10:04:45

标签: node.js sqlite

我使用node-sqlite3包来访问我的数据库 我尝试使用以下代码从Clients表中获取行:

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

错误的输出是:

{ [Error: SQLITE_RANGE: bind or column index out of range] errno: 25, code: 'SQLITE_RANGE' }

当我将sql更改为SELECT * FROM Clients where name LIKE '%$name%'时,查询有效,并且不会抛出错误。所以我想问题是,node-sqlite3试图在作为第一个参数传递给$name%的对象中找到一个名为Statement#all的变量或类似的变量。
我已经在API doc上搜索了有关此内容的更多提示,但无法找到。

我需要逃避什么吗?如何让我的查询使用命名绑定和sql通配符%

1 个答案:

答案 0 :(得分:2)

这不是绑定的工作方式。

你可以拥有

SELECT * FROM Clients where name LIKE $name

var name = "%"+"test"+"%";
..
{ $name: name }

绑定变量与后端数据库相关联,作为"整体"变量,你不应该把它与变量替换混淆。

你还应该能够使用sqlite的连接函数(未测试):

SELECT * FROM Clients where name LIKE '%'||$name||'%'
..
{ $name: test }