使用PHP的postgresql sproc(返回引用游标)的最佳方法?

时间:2009-01-29 21:55:47

标签: php postgresql cursor

我正在使用存储过程并从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

1 个答案:

答案 0 :(得分:1)

'更好的方法'是使用pg_query_params,但一次只发送1个查询/语句:

 pg_query_params('SELECT procedure_name($1, $2);'.array('foo','bar'));