参数化查询的查询格式

Query formatting for Parameterized Queries

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

bind message supplies 1 parameters, but prepared statement "" requires 0

查询如下

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

我正在使用参数化查询作为

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

Node: 5.7.1

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

时失败 each

来自ParameterizedQuery API

Only the basic variables (</code>, <code>, etc) can be used in the query, because Parameterized Queries are formatted by the database server.

类型 PreparedStatement and ParameterizedQuery represent the corresponding objects within the node-postgres 执行它们的驱动程序。这些对象封装了查询和格式化参数。

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

因此,您无法访问 pg-promise, such as # syntax. You can use the pg-promise syntax for query formatting when you are using queries directly, as a query string or as a QueryFile 对象的内部查询格式化功能。

使用 PreparedStatement and ParameterizedQuery,您只能访问数据库服务器支持的基本 , ,... 类型的参数格式,除此之外别无他法。


P.S。我是 pg-promise.

的作者