pg_query_params在24464参数失败,是否有上限? (PHP)

时间:2012-05-29 07:27:36

标签: php postgresql

我在8个字段中构建了一个10,000行的大型多行插入查询,这意味着我将90,000个值传递给pg_query_params作为数据数组。

我收到了这个错误:

  

警告:pg_query_params():查询失败:错误:绑定消息   提供24464参数,但准备好的声明“”需要90000英寸   第57行的class.postgresql.php

我已经仔细检查了SQL和数据数组,肯定有90,000个值被传递,但由于某种原因,它只能检测到24464的幻数。想法?

2 个答案:

答案 0 :(得分:6)

postgres使用的over the wire protocol表示所使用的参数数量是作为带符号的2字节整数传递的,90000显然不适合。

看起来php驱动程序只是忽略了不适合2字节整数的东西 - 90000是0x015f90,如果你只取低2字节那么你就得到0x5f90这是24464.将你的插入分成小批量你应该没问题

答案 1 :(得分:3)

< clippy>您似乎正在尝试使用大型多记录INSERT语句将数据批量加载到PostgreSQL数据库中。这是低效且笨拙的,但比使用单个插入而不包围显式事务要好得多。您应该重写代码以使用pg_copy_from(),通过PHP的postgresql驱动程序提供的漂亮接口,利用PostgreSQL的高效COPY批量加载接口。< / clippy>

严肃地说,COPY是要走的路,看起来像Pg PHP驱动程序支持它。如果您需要更多控制权,似乎您也可以使用pg_put_line()和明确COPY来执行此操作。