2013年3月6日水曜日

PHPからMySQLへの接続ではまる

WindowsでPHPからmysqliでMySQL接続しようとしてはまった時のメモ。 以下の接続時にエラーが出た。
$mysqli = new mysqli("localhost", "user", "pass", "dbname");
エラーメッセージが文字化けして読めず何が悪いのかさっぱり不明。
Warning: mysqli::mysqli() [mysqli.mysqli]: [2002] ڑς݂̌Ăяo悪̎Ԃ߂ĂȂ (trying to connect via tcp://localhost:3306) in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\mysqli.php on line 6

Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2002): ڑς݂̌Ăяo悪̎Ԃ߂ĂȂ߁Aڑł܂łB܂͐ڑς݂̃zXgȂ߁Amꂽڑ͎s܂B in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\mysqli.php on line 6
ネットで調べると「mysql.sockの設定がおかしいのでは」などの情報がたくさん出てくるがWindowsだとそれらしいものも無い。 とても悩んだが、どうもlocalhostがIPv6として解決されているのが原因のだったようである。 試しにIPアドレスに変えてみるとすんなり接続できた。
$mysqli = new mysqli("127.0.0.1", "user", "pass", "dbname");
確かにlocalhostにpingをかけてみるとIPv6アドレスを見に行っているようである。
C:\Temp>ping localhost

MyPC [::1]に ping を送信しています 32 バイトのデータ:
::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms

こちらの情報を参考にさせていただきました。 こちらのページのようにhostsを変更して解決する方法もあるようです。

0 件のコメント:

コメントを投稿