• ベストアンサー

PostgreSQLに接続できません(Windows XP)

PHPを数日前から始めました。 表題の通り、Apache+PHP+PostgreSQLという組み合わせでWindowsXP上で、ユーザ認証ページを作っています。 バージョンは、 Apache:1.3.29 PHP:4.3.11 PostgreSQL:8.0.2 です。 ApacheとPHPはちゃんと動作していまして、データベース関連以外の関数は動きます。 ところが、PostgreSQLで無事に必要なテーブルを作って、PHPで呼び出そうとしたら、こんなエラーメッセージが帰ってきちゃったのです。 "Fatal error: Call to undefined function: pg_connect() " 同様な現象に関する質問メールをPHPユーザMLで見つけたのですが↓ http://ns1.php.gr.jp/pipermail/php-users/2004-February/020886.html "PHPインストール時のconfigure"の意味が分かりません。私は、PHPをWindows Installerで落としたので、 configure云々は実行しませんでした。もしかして、 やり方が違うのでしょうか? あまりに初歩的な質問で申し訳ないのですが、どなたか対策をお教えいただけませんでしょうか?

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

php.ini ファイルの中の extension_dir = "./ext" のフォルダの設定を確認し、違っていたら自分の環境に合わせる そのフォルダに、php_pgsql.dllがあることを確認 ;extension=php_pgsql.dll のようになっていたら extension=php_pgsql.dll のようにコメント(;)をはずす とかしてみたらどうでしょう

tech22
質問者

お礼

いつもご回答いただいて本当にありがとうございます。 早速やってみました。 extension_dirの設定先のフォルダが大文字だったので修正し、extension=php_pgsql.dllのコメントアウトを外しましたが、まだ同じエラーが出ます。 ひょっとすると、初期のphp.ini編集段階や、他のdllのコピーの段階で手落ちがあったのかもしれませんので、もう一度1から調べなおしてみます。

その他の回答 (5)

  • honnsuki
  • ベストアンサー率18% (62/329)
回答No.6

>extension_dirの設定先のフォルダが大文字だったので修正し、extension=php_pgsql.dllのコメントアウトを外しましたが、まだ同じエラーが出ます。 普通PHP4だと c:\phpというフォルダーを作ってその中に解凍した中身を移すので extension_dir = "c:/php/extensions" というフォルダーになると思うのですが、別のフォルダー名にされたのでしょうか。 もしかして大文字にするときに全角になってしまっているとか。 私もPHP5とApache2で入れたときに参考にしたページがPHP5とApacheを使用しているサイトで、フォルダ名が違っているのになかなか気がつかなくてついこの間、苦戦したばっかりです。 No.5さんのいわれているとおり、一度Apacheを再起動しないといけないと思うのですがそれはされていますか?

tech22
質問者

お礼

ええ、"PHP"というフォルダ名にしていました。 今回のエラーの原因は、 1.extensionのディレクトリ指定のミス 2.コメントアウトの外し忘れ でした。 そして、ApacheとPostgreSQLの再起動を行って、 無事に実行できました。 何回もアドバイスをいただいてありがとうございましたっ!!

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

>まだ同じエラーが出ます。 エクステンションがちゃんと有効になっていたら、 phpinfo()で PostgreSQLに関する表示がでるはずですから 確認されてみてはどうでしょうか。 もしかしたら、再起動しないとだめだとか・

tech22
質問者

お礼

ありがとうございます!! phpinfo()を見たら無事変更できてました。 Apache,PostgreSQLを再起動したら、接続・クエリーが 実行でき、問題を解決できました。的確なご助言、本当にありがとうございました! これからも頑張ってPHPにチャレンジしてみようと思います♪

  • honnsuki
  • ベストアンサー率18% (62/329)
回答No.4

No.1です。 No2、No3さんのおっしゃるように PHP4でもPostgreSQLだとコメントをはずさなければならないのかもしれませんね。 勉強になりました。

参考URL:
http://allabout.co.jp/career/database/closeup/CU20031114/index.htm?FM=cukj&GS=database
tech22
質問者

お礼

参考になる記事をありがとうございます。 こちらの記事をもとに手順をもう一度確認してみます。

  • hiro823
  • ベストアンサー率25% (74/285)
回答No.3

こんばんわ。 Windowsではやったことがないので、ちょとぐーぐってみました。 ↓[PHP-users 19053]pg_connectがundefined function↓ http://ns1.php.gr.jp/pipermail/php-users/2003-November/019580.html 上記、PHP-usersで質問されてる方はWindows2000みたいです。 参考にどぞ。

参考URL:
http://ns1.php.gr.jp/pipermail/php-users/2003-November/019580.html
tech22
質問者

お礼

普段お使いではないのに、わざわざWindows環境のことを調べてくださって、ありがとうございます。 やはりextension関連なのですかね・・・。 ううむ、MLで指摘されている箇所を変更してみましたが、まだ同じエラーメッセージが出ますので、もう一度洗いなおしてみますね。 本当にありがとうございました。

  • honnsuki
  • ベストアンサー率18% (62/329)
回答No.1

私は普通MySQLを使っているのでちょっとPostgreSQLには疎いのですが、 PHPマニュアル http://jp.php.net/manual/ja/function.pg-connect.php を見てみると pg_connect()は、 connection_stringで指定したPostgreSQLデー タベースへの接続をオープンします。この関数は、成功時に接続リソー スを返します。接続できなかった場合には、FALSEが返されます。 とでています。 なのでまず、PostgreSQLがコマンドプロンプト単独で動いているみたいですので(DOS窓で操作)、パスワード、ユーザーネーム、サーバのIP(たとえばlocalhostとか192.168.0.×とか)が正しいか確認してみてはいかがでしょうか。 また下記URL参考になるかも知れません。 お役に立てば。

参考URL:
http://allabout.co.jp/career/database/closeup/CU20031122/index.htm
tech22
質問者

お礼

早速のご回答ありがとうございます。 改めて確認してみたのですが、パスワード・ユーザネーム・サーバの設定は間違いありませんでした。 と、すると、何らかの理由でPostgreSQLの関数にアクセスできないようになっているのでしょうか? うーむ・・・。

関連するQ&A