查询参数化查询的格式

时间:2016-06-13 05:34:02

标签: postgresql parameterized-query pg-promise

我正在使用pg-promise在PostgreSQL中使用like子句执行select查询。遗憾的是,查询失败,错误代码为08P01,错误消息为

  

绑定消息提供1个参数,但准备好的语句“”需要   0

查询如下

select user_name, user_id from users where user_name like '$1#%'

我使用参数化查询

var userQuery:pgp.ParameterizedQuery = new pgp.ParameterizedQuery("<above_query>", [userName]);

用于执行查询的API是

each(query:TQuery, values:any, cb:(row:any, index:number, data:Array<any>)=>void, thisArg?:any):XPromise<Array<any>>;

我查看了pg-promise示例,但它没有使用带参数化查询的LIKE子句。

环境详细信息

  

pg-promise:4.3.2

     

PostgreSQL:9.6

     

节点:5.7.1

更新:1 我可以使用query API(纯文本sql)运行查询,但不能使用each运行查询。任何人都可以在使用each API时解释为什么LIKE子句在Parameterized失败。

1 个答案:

答案 0 :(得分:2)

来自ParameterizedQuery API

  

在查询中只能使用基本变量($1$2等),因为参数化查询由数据库服务器格式化。

类型PreparedStatementParameterizedQuery表示执行它们的node-postgres驱动程序中的相应对象。这些对象封装了查询和格式化参数。

即。这两个对象的重点是将查询和格式化参数传递到服务器中,因此它们在那里被格式化,而不是使用内部查询格式化引擎。

因此,您无权访问pg-promise的内部查询格式功能,例如$1#语法。当您直接使用查询,查询字符串或pg-promise对象时,可以使用QueryFile语法进行查询格式化。

使用PreparedStatementParameterizedQuery,您只能访问数据库服务器支持的基本$1, $2,...类型的参数格式化。

P.S。我是pg-promise的作者。