0

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

4

1 回答 1

1

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

 pg_query_params('SELECT procedure_name($1, $2);'.array('foo','bar'));
于 2010-07-30T12:44:25.217 回答