Лучший способ использовать postgresql sproc (возвращая ref курсор) с PHP? - PullRequest
0 голосов
/ 30 января 2009

Я использую хранимые процедуры и вызываю их из 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 Ответ

1 голос
/ 30 июля 2010

«Лучшим способом» будет использование pg_query_params, но вы отправляете только 1 запрос / оператор за раз:

 pg_query_params('SELECT procedure_name($1, $2);'.array('foo','bar'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...