有没有办法在php中的一次调用中发送多个postgresql sql prepared语句?

时间:2010-10-14 21:43:50

标签: php database postgresql

有没有办法一次执行更多sql准备好的语句?或者至少使用一些东西来实现这个结果,可以用事务来模拟吗?

pg_send_query可以执行更多语句(来自php docs“要执行的SQL语句或语句。”) 但 pg_send_execute和pg_send_prepare只能用于一个语句。

查询参数具有以下描述

“参数化的SQL语句。必须只包含一个语句。(不允许使用分号分隔多个语句。)如果使用任何参数,则将它们称为$ 1,$ 2等。”

来自http://www.php.net/manual/en/function.pg-send-prepare.php

有没有办法一次发送更多的语句来减少php和postgresql之间的往返次数,就像pg_send_query那样?

我不想使用pg_send_query,因为没有参数绑定我的代码中可能有SQL注入漏洞。

2 个答案:

答案 0 :(得分:1)

只要您(a)使用持久连接(直接或通过池)并且(b)没有遭受“n + 1选择”,到DB服务器的往返不应该是您的瓶颈“问题。

新连接具有一个数量级的开销,如果在每个查询上完成,则会降低速度。如果应用程序检索(或采取行动)相关行集而不是一次执行所有操作,那么n + 1问题会导致生成的行程远远超过实际需要的行程。

请参阅:What is the n+1 selects problem?

答案 1 :(得分:0)

以分号分隔查询:

UPDATE customers SET last_name = 'foo' WHERE id = 1;UPDATE customers SET last_name = 'bar' WHERE id = 2;

编辑: 好的,你不能在通话方面这样做:

参数化的SQL语句。必须只包含一个语句。 (不允许以分号分隔的多个语句。)

另一种方法是使用此方法调用存储过程,此SP发出多个语句。