2

最近 PDO について知ったので、php ファイルをその形式に合わせて変更したところ、次のような応答が返ってきました。

ERROR: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

PDO に適合するように、接続変数の形式だけを変更しませんでした。私は Bitnami Lampstack (5.3.16-0) を実行しており、php.ini ファイルで mysql を使用して PDO の行のコメントを解除する限り、ドキュメントに記載されていることを実行しました。サイズが 0 の mysql.sock ファイルと関係があるかどうか疑問に思っています。

私の PDO 接続は次のようになります (このエラーに関連する別の質問で言及されていたので、unix_socket と port の部分を追加しましたが、役に立たなかったようです):

$dbConnection = new PDO('mysql:unix_socket=/opt/lampstack-5.3.16-0/mysql/tmp/mysql.sock;host=$dbhost;port=3306;dbname=$dbname;', $user, $pass);

apache、mysql、httpd、ect はすべてサーバー上で正常に動作しており、これは PDO を有効にした後にのみ発生しました。

4

2 に答える 2

5

まず、例の接続文字列は一重引用符で囲まれているため、変数の置換は機能しません。変数 $dbhost の内容を使用する場合は、二重引用符を使用します。

次に、ローカル ソケットとホスト/ポートの両方を指定しないでください。どちらかを選んでください。あなたの投稿から、ソケットは本来の意図ではなかったと推測しています。

これを試して:

 $dbConnection = new PDO("mysql:host=$dbhost;port=3306;dbname=$dbhost", $user, $pass);

また、この例では、dbname が $dbhost 変数を指しています。これはタイプミスですか?

ソケットはすべて 0 バイトです。それらは読み書き可能な名前付きパイプにすぎませんが、それ自体には内容がありません。ソケットを使用する場合は、ソケットが存在することを確認してください。

幸運を!

于 2012-11-20T03:21:21.093 に答える
0

"mysql:host='localhost';dbname='data';charset=utf8" DSN 形式が間違っています。引用符が含まれていてはいけません。これが正しいフォーマットです

//$con=new PDO($dsn, $user, $password); $con=new PDO('mysql:dbname=testdb;host=127.0.0.1','root','');

于 2015-05-17T07:27:11.847 に答える