2009-01-29 109 views
0

我使用存儲過程並從PHP調用它們(我也在Java應用程序中使用相同的過程)。使用postgresql sproc(返回引用遊標)與PHP的最佳方式?

現在我做這種方式(工作):

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

你確定你是在談論Postgres的?因爲我無法在參考文獻中處理「CALL」命令。 – 2009-01-30 11:10:09

回答

1

的「更好的方式」將使用pg_query_params,但您一次只能發送1個查詢/聲明:

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