gpt4 book ai didi

javascript - Node.js - PostgreSQL - 无法确定参数 $1 错误的数据类型

转载 作者:搜寻专家 更新时间:2023-10-31 23:03:41 25 4
gpt4 key购买 nike

我正在尝试使用 node.js pg npm 包创建一个 PostgreSQL 准备好的语句。但是,我不断收到错误消息:

could not determine data type of parameter $1

 function promiseQuery(sql, values) {
return new Promise(function(resolve, reject) {
pool.query('select $1 from workers', ['name'], function(err, result) {
if (err) {console.log(err); reject(err)}
else resolve(result.rows);
})
});
}

在数据库中,name 字段设置为类型 text not null

我也尝试了 pg-promise , 但也没有成功。

最佳答案

在查询select name from workers中,从SQL syntax的 Angular 来看name 是一个 identifier,标识符永远不能作为 $N 参数传递,它们必须逐字出现在命令中。否则无法准备查询。

$N 参数只能出现在查询中文字(常量)所在的位置。

如果在任何客户端库之外使用 PREPARE SQL 命令尝试类似的操作,您会遇到同样的错误:

PREPARE p as SELECT $1 FROM pg_class;
ERROR: could not determine data type of parameter $1

解决方案是在将查询提交到数据库之前,使用列名或表名的字符串替换技术在 javascript 中构建查询。

pg-promise 确实支持将标识符注入(inject)到具有特定语法的查询中。来自 its documentation :

db.query('SELECT $1:name FROM $2:name', ['*', 'table']);
//=> SELECT * FROM "table"

关于javascript - Node.js - PostgreSQL - 无法确定参数 $1 错误的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44237732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com