1

PostgreSQL データベースを使用する大規模な PHP アプリケーションを Rails に移行する必要があります。これは OS X Lion Macbook Pro で、Apache + PHP の既存のインストールを使用しています。

Homebrew 経由で PostgreSQL をインストールしました。ホストが「localhost」、ユーザー名が「my_username」、デフォルトのデータベースが「my_db」であるとします。パスワードは空白です。結果は次のとおりです。

コマンドラインからデータベースに問題なくアクセスできます

psql -h localhost -U my_username -p 5432 my_db

問題ない。これも機能します:

psql -U my_username my_db

また、問題ありません。また、Rails を使用して、次の設定で非常に簡単にデータベースにアクセスできます。

adapter: postgresql
encoding: sql_ascii
template: template0
database: my_db
pool: 5
username: my_username
password:

それはすべてうまくいきます。しかし、PHPでは、私がそうするとき

pg_connect("host=localhost port=5432 dbname=my_db user=my_username") or die(pg_last_error());

次のメッセージが表示されます。

LANG_FATAL_ERROR: LANG_DB_COULD_NOT_CONNECT
Access denied for user 'my_username'@'localhost' (using password: YES)

行から "host=" を削除すると、次のようになります。

pg_connect("port=5432 dbname=my_db user=my_username") or die(pg_last_error());

また

pg_connect("dbname=my_db user=my_username") or die(pg_last_error());

私はまったく何も得ません。pg_connect は false を返し、接続がないことを示しますが、エラーはありません! pg_last_error() は何も返しません。

また、接続文字列に password='' を追加しようとしましたが、結果はありませんでした。

Stack Overflow や Google などでこの問題への言及を見つけるのに非常に苦労しましたが、うまくいきませんでした。Stack Overflow には同様のタイトルの質問がいくつかありますが、この特定の問題はありません。ネットで見つけたのは、pgsql.so を自分でコンパイルし、拡張子が php.ini にリストされていることを確認することだけでした。私はゼロの結果でそれをしました。

明らかに、これは PostgreSQL 自体の問題ではなく、PHP に関係しています。

助けてください。ありがとう。

4

1 に答える 1

1

このエラー メッセージ:

ユーザー 'my_username'@'localhost' のアクセスが拒否されました (パスワードを使用: YES)

はよく知られているMySQLエラー メッセージであり、pg_connect() 呼び出しとは関係ありません。

また、pg_last_error() は既存の接続を想定しているため、接続の失敗に役立つものを出力することは期待できないことに注意してください。接続エラーに関連するエラー メッセージは、PHP エラー出力で検索する必要があります。

于 2012-06-05T23:54:29.430 に答える