Cur*_*ind 4 postgresql parameterized-query pg-promise
我正在使用pg-promisePostgreSQL 中的 like 子句执行选择查询。不幸的是,查询失败,错误代码为08P01和错误消息
绑定消息提供 1 个参数,但准备好的语句 "" 需要 0
查询如下
select user_name, user_id from users where user_name like '$1#%'
Run Code Online (Sandbox Code Playgroud)
我使用参数化查询作为
var userQuery:pgp.ParameterizedQuery = new pgp.ParameterizedQuery("<above_query>", [userName]);
Run Code Online (Sandbox Code Playgroud)
用于执行查询的 API 是
each(query:TQuery, values:any, cb:(row:any, index:number, data:Array<any>)=>void, thisArg?:any):XPromise<Array<any>>;
Run Code Online (Sandbox Code Playgroud)
我查看了 pg-promise 示例,但它没有将 LIKE 子句与参数化查询一起使用。
环境细节是
PG承诺:4.3.2
PostgreSQL:9.6
节点:5.7.1
更新:1
我可以使用queryAPI(纯文本 sql)运行查询,但不能使用each. 任何人都可以解释为什么 LIKE 子句each在使用ParameterizedAPI 时失败。
查询中只能使用基本变量(
$1、$2等),因为参数化查询由数据库服务器格式化。
类型PreparedStatement和ParameterizedQuery表示执行它们的node-postgres驱动程序中的相应对象。这些对象封装了查询和格式化参数。
即这两个对象的全部意义是将查询和格式化参数传递到服务器,因此它们在那里被格式化,而不是使用内部查询格式化引擎。
因此,您无法访问pg-promise的内部查询格式功能,例如$1#语法。当您直接使用查询、作为查询字符串或作为QueryFile对象时,您可以使用pg-promise语法进行查询格式化。
使用PreparedStatement和ParameterizedQuery,您只能访问$1, $2,...数据库服务器支持的基本参数格式类型,没有其他内容。
PS 我是pg-promise的作者。
| 归档时间: |
|
| 查看次数: |
12025 次 |
| 最近记录: |