- ベストアンサー
php×postgresでのストアド利用について
- phpとpostgresを組み合わせてストアド(手続き)を呼び出し、結果を取得する方法について教えてください。
- postgresで作成したストアドをphpから呼び出すためのコードを教えてください。
- phpでpostgresのストアドを利用する際に必要な手順と注意点を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
MDB2は、結局のところ、PHPの標準関数のラッパーです。 MDB2/Driver/pgsql.php あたりを見てみてください。 普通に、pg_queryを叩いているかと思います。 なので、最終的にpg_queryに直でストアドプロシージャを叩いたときに正しく結果が返ってくるのかを確認していただくのが 最も早いかな、と思います。 それと、すみません、私はストアドプロシージャを使ったことがないので、よくわからないんですが、 http://pear.plus-server.net/package.database.mdb2.intro-function-module.html こちらあたりのマニュアルを閲覧されたんだと思いますが、これで渡せなかった、ってことですよね? これを元に、 MDB2/Driver/Function/pgsql.php の内容を見てみたんですが、こんな感じになってました。 <?php function &executeStoredProc($name, $params = null, $types = null, $result_class = true, $result_wrap_class = false) { $db =& $this->getDBInstance(); if (PEAR::isError($db)) { return $db; } $query = 'SELECT * FROM '.$name; $query .= $params ? '('.implode(', ', $params).')' : '()'; return $db->query($query, $types, $result_class, $result_wrap_class); } ?> 最終的に$queryが、構築完了したSQLなんですが、第二引数の$paramsは、ただ単純にimplodeで展開しただけみたいですね。 ストアドはわかりませんけど、見るからにダメそうな感じですね。 これは、MDB2::queryメソッドに、構築済みのSQLを渡したほうが早い気がしますね。(最初のpg_queryがストアドを通せるかを確認した後に。)
その他の回答 (1)
- hogehoge78
- ベストアンサー率80% (433/539)
http://jp2.php.net/manual/ja/pdo.prepared-statements.php PDOを使うと出来るっぽいですね。 例の10番目を観てみてください。
お礼
ありがとうございます。 PDOですか、ストアド自体はそれでいけそうですね。 でも、ちょっと例題のハードルを高く設定しすぎました。 入力パラ1つと、入出力パラにスカラー、アレイ、テーブルと3種類用意してみましたが、ややこしすぎてうまくいっていません。 もう少しシンプルなところから試してみようと思います。 あと、 pear MSB2とかでは出来なさそうですか? マニュアルサイトのFunction Moduleのところに一応例があったのですが、これも出力パラなしのシンプルな例しかなくて。。。