postgresql - 参数化查询的查询格式

标签 postgresql parameterized-query pg-promise

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

bind message supplies 1 parameters, but prepared statement "" requires 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

Node: 5.7.1

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

最佳答案

来自 ParameterizedQuery API :

Only the basic variables ($1, $2, etc) can be used in the query, because Parameterized Queries are formatted by the database server.

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

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

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

PreparedStatementParameterizedQuery您只能访问数据库服务器支持的基本 $1, $2,... 类型的参数格式,除此之外别无他法。


附言我是 pg-promise 的作者.

关于postgresql - 参数化查询的查询格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37782423/

相关文章:

ruby-on-rails - 如何使用 Rails 中的 Active Record 进行慢速 sql 查询以进行测试

postgresql - 使用 Docker,是什么触发了 PANIC : could not locate a valid checkpoint record

javascript - 使用 pg-promise 进行多行插入

postgresql - 通过 PG-Promise 初始化 Postgresql 数据库时遇到问题

c - PostgreSQL 中指针的格式说明符?

sql-server - sp_ExecuteSql : The parameterized query expects the parameter @XX, 未提供

python - pymysql:MySQL 参数化 LIKE 查询

r - 如何在 dplyr 中使用参数化 SQL?

postgresql - Pg-promise 客户端无法从 ElephantSQL 云数据库中正确检索特殊字符

.net - 如何使用 Visual Studio 2017 或 .NET 4.5+ 设置 PostgreSQL?