You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:38:19