有没有办法一次执行更多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注入漏洞。
答案 0 :(得分:1)
只要您(a)使用持久连接(直接或通过池)并且(b)没有遭受“n + 1选择”,到DB服务器的往返不应该是您的瓶颈“问题。
新连接具有一个数量级的开销,如果在每个查询上完成,则会降低速度。如果应用程序检索(或采取行动)相关行集而不是一次执行所有操作,那么n + 1问题会导致生成的行程远远超过实际需要的行程。
答案 1 :(得分:0)
以分号分隔查询:
UPDATE customers SET last_name = 'foo' WHERE id = 1;UPDATE customers SET last_name = 'bar' WHERE id = 2;
编辑: 好的,你不能在通话方面这样做:
参数化的SQL语句。必须只包含一个语句。 (不允许以分号分隔的多个语句。)
另一种方法是使用此方法调用存储过程,此SP发出多个语句。