Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用sql通配符的命名参数绑定不起作用_Node.js_Sqlite - Fatal编程技术网

Node.js 使用sql通配符的命名参数绑定不起作用

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

我正在使用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)
        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版本对我来说似乎是最好的,而且很有效。谢谢: