我正在使用存储过程并从PHP中调用它们(我在Java应用程序中也使用相同的过程)。
现在我这样做(有效):
if(!($result = pg_query($connection, 'BEGIN; SELECT '.$query.'; FETCH ALL IN '.self::$cursor.';'))) return NULL;
其中$query
类似于“CALL create_account('foo', 'bar', 'etc')
”
而$cursor
只是“ref_cursor”,因为那是光标名称(是的,我知道它
好像是个黑客......)。
我知道程序(和准备好的陈述)的好处,我想知道执行上述内容是否有任何意义。据我所知,程序是预编译的,但上面的查询不是。所以我只是在欺骗自己,相信我会在这方面获得一些性能提升?我对我的程序很有帮助,因为我有一个Java自动生成器,可以为我编写它们。在这种情况下使用PDO更好吗?我在网上搜索了pgsql ref cursors + pdo上的内容,但是我找不到多少。 我知道我可以使用PDO准备好的语句,但这不符合我的程序。
-Yngve
答案 0 :(得分:1)
'更好的方法'是使用pg_query_params,但一次只发送1个查询/语句:
pg_query_params('SELECT procedure_name($1, $2);'.array('foo','bar'));