PostgreSQL报错:绑定参数与预准备语句数量不符,求解决
问题排查与解决
报错原因很明确:你的SQL语句定义了15个参数占位符($1到$15),但传入的参数数组有16个元素,两者数量不匹配。
具体问题点
你在参数数组里重复传了一次parseInt(p.business_id),导致后续所有参数位置错位,最终参数总数多了1个。同时检查字段与参数的对应关系:
- SQL中
business_id仅需要传一次(对应$3),但你在参数数组里连续传了两次 - 后续参数因此整体后移一位,最后额外多出来一个
0没有对应的占位符
修正后的代码
const r1 = await client.query(` INSERT INTO booking (client_id, car_id, business_id, pick_up_station_id, return_station_id, type, text, from_date, to_date, booking_range, km_free, km_extra, km_overdrawn, excess_back) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, tsrange($10, $11, '()'), $12, $13, $14, $15) RETURNING ID; `, [ p.client_id !== '' ? parseInt(p.client_id) : null, parseInt(p.car_id), parseInt(p.business_id), p.pick_up_station_id, p.return_station_id, p.type, p.notice, new Date(p.date_from), new Date(p.date_to), new Date(p.date_from), new Date(p.date_to), parseInt(p.free_km), parseInt(p.extra_km), 0, 0 ]);
说明
- 移除了重复的
parseInt(p.business_id)参数,现在参数数组长度为15,与SQL占位符数量完全匹配 tsrange($10, $11, '()')的用法是正确的,它需要两个日期参数,这部分没有问题
内容的提问来源于stack exchange,提问作者newexe91
相关产品推荐
相关产品推荐

