wiz*_*ard 7 javascript postgresql node.js pg pg-promise
我正在尝试使用 node.js npm 包创建 PostgreSQL 准备好的语句pg。但是,我不断收到错误:
无法确定参数 $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);
})
});
}
Run Code Online (Sandbox Code Playgroud)
在数据库中,该name字段设置为 type text not null。
我也尝试了pg-promise,但也没有成功。
在查询中,从SQL语法select name from workers的角度来看是一个,并且标识符永远不能作为参数传递,它们必须逐字出现在命令中。否则无法准备查询。 nameidentifier$N
$N参数只能出现在查询中文字(常量)所在的位置。
PREPARE如果在任何客户端库之外尝试使用 SQL 命令类似的操作,您会遇到相同的错误:
PREPARE p as SELECT $1 FROM pg_class;
ERROR: could not determine data type of parameter $1
Run Code Online (Sandbox Code Playgroud)
解决方案是在将查询提交到数据库之前,使用列名或表名的字符串替换技术在 JavaScript 中构建查询。
pg-promise 确实支持使用特定语法将标识符注入到查询中。从它的文档来看:
db.query('SELECT $1:name FROM $2:name', ['*', 'table']);
//=> SELECT * FROM "table"
Run Code Online (Sandbox Code Playgroud)