我有一个数据库goods
,其中有两列id jsonb primary_key
和name
。使用以下查询:
const query = 'INSERT INTO "goods" (id, name) VALUES ($1, $2)'
字符串
连同下列数据:
const data = {id: 1, name: "milk"};
型
给了我以下错误:
{ [error: bind message supplies 1 parameters, but prepared statement "" requires 2]
name: 'error',
length: 130,
severity: 'ERROR',
code: '08P01',
detail: undefined,
hint: undefined,
position: undefined,
internalPosition: undefined,
internalQuery: undefined,
where: undefined,
schema: undefined,
table: undefined,
column: undefined,
dataType: undefined,
constraint: undefined,
file: 'postgres.c',
line: '1556',
routine: 'exec_bind_message' }
型
我有一个postgres数据库设置,通过pg.Pool()连接并执行JavaScript来插入我的数据。
编辑:这是我准备查询的方式:
pool.query(query, [data]).then(() => {
console.log("ok")
})
.catch(error => {
console.log(error)
});
型
编辑2:
使用以下命令:
const query = 'INSERT INTO "goods" (id, name) VALUES ($1, $2)'
const data = JSON.stringify([1, "milk"]);
pool.query(query, data).then(() => {
console.log("ok")
})
.catch(error => {
console.log(error)
});
型
返回以下错误:[TypeError: self.values.map is not a function]
4条答案
按热度按时间xwbd5t1u1#
根据文档,参数必须是JavaScript对象(即数组)。因此您不需要对
data
进行字符串化试试这个:
字符串
或
型
chy5wohz2#
根据文档,Prepared Statement需要一个值数组,而不是一个具有属性的对象,即您的数据必须是:
const data = [1, "milk"];
8qgya5xd3#
我的问题是,我把我的占位符值在单引号。
因此,而不是:
字符串
这样做:
型
knsnq2tg4#
我在使用slonik时也遇到了同样的问题。
不要使用插值
别这样
字符串
使用值占位符
这样做-用单引号 Package 变量
型