• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:pg_prepareが使用できない(Undefined function)

pg_prepareが使用できない(Undefined function

このQ&Aのポイント
  • 現在PHPとPostgreSQLでアプリケーションを作成しています。データベースのセキュリティのためにpg_prepare関数を使用したいのですが、エラーが発生しています。
  • エラーメッセージは「Fatal error: Call to undefined function pg_prepare()」です。該当するソースコードとバージョンは以下の通りです。
  • 原因として考えられることをご教示ください。pg_escape_stringも同様のエラーが起きているため、解決策をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • gfct9s
  • ベストアンサー率90% (10/11)
回答No.1

pg_…()関数すべての呼び出しでエラーが発生するわけではなく、 pg_prepare()、pg_escape_string()だけで、ということでしょうか。 組み込みの関数で「undefined」エラーということは、多くはコンパイルオプション(Linux)、 またはextension記述もれ(Windows)だと思いますが、一部の関数だけ ということですと妙かなという気がします。 動かないという2つの関数と対応するPHPバージョンは、 pg_escape_string (PHP 4 >= 4.2.0, PHP 5) pg_prepare (PHP 5 >= 5.1.0RC1) ということになるようですが、いずれも動かないのはバージョン4.2以前 だということになりそうで、それはさすがにないですよね。 [その1] まずはphpinfo()関数で、PHPバージョンを再度ご確認いただく必要が あると思います。 2つ以上の異なるバージョンのPHPをインストールしているとき、 Apacheが思いもかけないバージョンのPHPを用いている場合があります。 この場合、シェル/コマンドラインで $ php --version とやっても、正確なPHPバージョンを知ることはできません。 例えばRPM系のLinux(FedoraCoreとか)では、OSインストール時点で PHPがインストールされている場合があると思います。 この場合、インストール済みRPM版PHPを削除しておかないと、 ソースからインストールしたつもりでも、実際に動いているのは RPM版だったり、ということがありえます。 [その2] phpinfo()関数でPHPインストール情報を表示したとき、 「pgsql」項目の内容はどうなっているでしょうか。 (例) http://allabout.co.jp/internet/database/closeup/CU20040928A/ok4.jpg もしpgsql項目がない場合、お使いのPHPでPostgreSQLサポートが 有効になっていないので、pg_…()関数が使えません。 Windowsの場合は、php.iniのextension=php_pgsql.dllのコメントを 外したうえで、php_pgsql.dllをWindowsのシステムディレクトリにコピーします。 php.iniを変更したら、Apacheを再起動します。 WindowsPHP5のインストールについては、下記のページ(AllAbount)を ご覧になってください。 http://allabout.co.jp/internet/database/closeup/CU20040928A/ Linux/UNIXの場合で、ソースからインストールしている場合は、 PHPのコンパイルオプションに「--with-pgsql」を付けて再度コンパイル します。 RPM等パッケージからインストールしている場合は、PHPのpgsql関連 パッケージをインストールします。 [その3] ほかのundefined function関連の質問も、参考なるかもしれません。 http://oshiete1.goo.ne.jp/qa2557443.html http://oshiete1.goo.ne.jp/qa794504.html http://oshiete1.goo.ne.jp/qa1669932.html http://oshiete1.goo.ne.jp/qa2202770.html

nihoninu
質問者

お礼

丁寧なご回答ありがとうございます。 おかげさまで、解決をしました。 ////////////////////////////////////////////////////////////// 組み込みの関数で「undefined」エラーということは、多くはコンパイルオプション(Linux)、 またはextension記述もれ(Windows)だと思いますが、一部の関数だけ ということですと妙かなという気がします。 ////////////////////////////////////////////////////////////// おっしゃるとおり、コンパイル時のオプションのつけ方を変えてみるとうまくいきました。具体的には、--with-pdo-pgsqlオプションをはずすとなぜかうまくいきました。 ちなみにエラー時は、pg関数の全てがNGだったわけでなく、一部は使えるようになっていたみたいです。 大変困っていたので本当に助かりました。ありがとうございます。 これからもよろしくお願いいたします。

関連するQ&A