pg_prepareが使用できない(Undefined function

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

pg_prepareが使用できない(Undefined function

お世話になります。 現在PHPとPostgreSQLでアプリケーションを作成しております。 データベースのセキュリティのために、pg_prepare関数を使い たいのですが、以下のようなエラーが出てしまいます。 Fatal error: Call to undefined function pg_prepare() in ... 該当ソースコードとバージョンは以下のとおりです。 ///ソース $con = pg_connect("user = $DBUSER password = $DBPASSWORD dbname = $DBNAME"); $rst1 = pg_prepare($con, "query", 'SELECT * FROM test WHERE name = $1'); $con = pg_close($con); ///バージョン Apache 2.0.59 PHP 5.1.6 PostgreSQL 8.1.4 何か原因で考えられることはあるでしょうか。 pg_escape_stringもまったく同じエラーが起きてしまい頭を抱えています。お手数かけますがよろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • 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

  • pg_connect関数

    すみません、質問させてください。 PostgreSQLでPHPの接続をしようと考えています。 Apache, PHP, PostgreSQLのインストールは終了 しています。 PHPのスクリプト内で、 if( !$pg_con=pg_connect("host=$hostname dbname=test user=nobody") ) { と記述して接続を試みているのですが、 Call to undefined function: pg_connect() ・・・ というエラーが出てしまいます。 どのように対処すればいいかアドバイスを下さい。 お願いいたします。

  • PHPのpg_pconnect関数について

    WindowsにApache2・PHP5・Postgresqlをインストールしました。 PHPは動くのですが、pg_pconnectのようなpostgresql関係の関数が動きません。 具体的には Call to undefined function pg_pconnect() というエラーがでます。 php.iniのextension=php_pgsql.dllの箇所を有効にしたのですが、それでもエラーが出ます。

    • 締切済み
    • PHP
  • mysql_num_rowsを使わず、SQL文のCOUNT関数で件数を得たい

    以下のサンプルを実行すればうまくいくのですが、 $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from mytable where number = 10"; $rst = mysql_query($sql, $con); $countnum = mysql_num_rows($rst); echo $countnum . "件のレコードがありました。<br>"; ◆実行結果: 10件のレコードがありました。 「10件のレコードがありました。」という一行の実行結果を得たい目的なら、 三行目を「$sql = "select count(*) from mytable where number = 10";」 みたいにCOUNT関数を使っても結果が得られそうに思います。 というかむしろ、その方がコードが短くて済みそうな気がするのですけど。 その場合、4~6行目のPHPコードはどのように記述したらいいでしょうか。 echo $rst; としても、変な文字列を返してきました。

    • ベストアンサー
    • PHP
  • my.iniで設定するパスワードの意味がよくわかりません

    4.0.16から、4.0.26にバージョンアップしたのですが、root権限や、パスワードが よくわかりません。 4.0.16の時は、mysql.exeを開き、DOS窓で「show databases;」とたたくだけで、 testとmysqlが表示されましたが、 4.0.26や、4.1x系ですと、testしか表示されません。たとえば、 show databases -A -uroot -pPASSWORD;  や、 show databases -A -urootD;  などととやっても、↓のようになってしまいます。 ERROR 1064: You have an error (中略)'-A -uroot -p PASSWORD' at line 1 他方、4.0.26で、my.iniに、   [WinMySQLadmin]   user=root   password=mypassword と設定してあるものが認識されていないようです。 既存のPHP+MySQL4.0.16(ローカルで使うだけのものなので、ユーザー名、パスワードなし)で 構築したPHPプログラムがあるのですが、これを 今回インストールしたMySQL 4.0.26の組み合わせに適用しても動かなかったので、   $DBSERVER = "localhost";   $DBUSER = "root"; //←ここと、   $DBPASSWORD = "mypassword"; //←ここです   $DBNAME = "mydb";   $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);   $selectdb = mysql_select_db($DBNAME, $con); とやってみましたが、エラーになってしまうので、   $DBPASSWORD = ""; //←ここを空白にする とやったら、MySQLに接続できました。 my.iniに記入したものは、適用されていないのでしょうか?

    • ベストアンサー
    • MySQL
  • ローカルWinXP環境でのPHP+PostgreSQL

    初歩的な質問で申し訳ありません。 PHP+PostgreSQLの勉強をしようと思い、WinXPのローカルマシン上にApache(1.3.27)+PostgreSQL(7.2.1)+PHP(4.3.0)をインストールしました。PostgreSQLを使わないでPHPだけだとブラウザで正しく表示されるのですが、PostgreSQLを使おうとするとエラーになります。 コーディングは $con = pg_connect("localhost port=**** dbname=**** user=*** password=***");です。 エラーは Call to undefined function: pg_connect() in~ でpg_connect未定義だと思います。 PHPのDLLのコピーはphp4ts.dll及びdllフォルダ中の全DLLをシステムファイルにコピーしています。 iniファイルはdoc_root、extension_dir、include_pathを設定しています。 何か拡張モジュールが必要なのでしょうか? それとも他にコピーするDLLがあるのでしょうか?もしくはiniファイルの設定不足なのでしょうか? よろしくお願い致します。

    • 締切済み
    • PHP
  • PHPでMySQLに接続失敗

    Apache_2.0.55 php-5.1.2-win32 mysql-5.0.21-win32 windows XP HOME Call to undefined function mysql_connect() in C:\Program Files\Apache Group\Apache2\htdocs\sample\smp01.php on line 9 とエラーがでました。 以下の設定しているのですが、このようなエラーがでました PHPとApacheのテストは成功しています mysqlコマンドラインツールの起動・操作もできました mysqlのパスワードは設定はしていません PHPのスクリプトは実行できるのですが PHPとMySQLの接続がうまくいきません 色々と、調べているのですが原因がわかりません 初心者です、どうぞ宜しくお願いします 1 <?php 2 3 $DBSERVER = "localhost"; //MySQLサーバー名 4 $DBUSER = "root"; //ログインユーザー名 5 $DBPASSWORD = ""; //パスワード 6 $DBNAME = "sampledb"; //データベース名 7  8 //MySQLに接続します 9 $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); libmysql.dllをC:\WINDOWS\system32にコピー PHP.iniファイルでextension=php_mysql.dllをコメントから復帰 Apacheを再起動

    • ベストアンサー
    • MySQL
  • sqlite_openが「undefined function」エラー

    市販本で、勉強中です。sqliteについて質問です。 以前、テキストとおりに、サンプルPGを作って、動作してました。 (PHP-5.0.4) 先日、PHPを5.2.4に上げた後で、上記PGを実行すると、 sqlite_openが「undefined function」エラー になってしまいました。 php.ini等、環境設定も以前と同じようにしたつもりです。  例:extension_dir = "c:/php/ext" なにか、環境設定が足りないのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 会員制サイトで最終ログイン日を取得

    PHP4 Mysql4 で運営する会員制サイトで ログインしてきたIDで、日付を自動で取得したいのですが 的外れな事をしているのか? 出来ません。。。 トライアンドエラーで頑張って見たのですが、 どんどんおかしな方へ行っているみたいなので、質問させてください。 IDでログインした先のページを以下のようにしているのですが 日付が更新できません。 IDは varchar(5) で a001 b001 のようにアルファベットと数字になっています 更新日は reg_date で date にしています。 <?PHP require_once("auth.php"); require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql =" select * from member where id=$id";  $rst = mysql_query($sql, $con); $sql ="update member set reg_date =date() where id = $id"; $con = mysql_close($con); ?> 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • pg_copy_fromの使い方について質問です。

    pg_copy_fromの使い方について質問です。 <?php $a = array(1,2); $con=pg_connect("host=localhost dbname=byoin port=5432 user=postgres"); if (!$con) { die("データベースが開けません。<br>\n"); } pg_copy_from($con,ccc,$a,","); pg_close($con); ?> のようにすると、 Warning: pg_copy_from() [function.pg-copy-from]: Copy command failed: ERROR: 列"eee"のデータがありません CONTEXT: cccのCOPY。行番号 1: "1" in C:\xampp\htdocs\c.php on line 7 のようにエラーが出ます。 ちなみにデータベースは、 cccというテーブルの中にddd(integer not null、主キー)とeee(integer)の2列が作ってあります。 どうすれば、コピーがうまく出来るのでしょうか? ご回答をお願い致します。

    • ベストアンサー
    • PHP
  • pg_exec()、pg_result()は、使わない方が良いのか?

    去年の7月から、PHPを使っています。 そこで、初めて買った本の中で、pg_exec()、pg_result()を使ってPostgreSQLを使うサンプルプログラムが載っていました。 それを使って、webソースをくんできたのですが、ふと技術評論社のPHPのポケットリファレンスなどを見たら、pg_exec()、pg_result()が載っていません。(汗) googleなどで検索すると、また使っているようですが、将来性を考えると、pg_query()、pg_fetch_xxxx()などにソースを直しておいた方が良いのでしょうか? また、pg_fetch_xxx()の中で、pg_fetch_objectが、良いのでしょうか?

    • ベストアンサー
    • PHP