SQLSTATE[42000] [1044] でアクセスできない!? [php]
先日、「サーバーを新しくしたらプログラムが動かない」というので、見に行ったのですがハマりました。
どこかで購入(?)したシステムをインストールしたらしいのですが、データベースの接続時に、
SQLSTATE[42000] [1044] Access denied for user 'ユーザー名'@'localhost
というエラーが出ていました。
SQLSTATE[42000] [1044] は、指定されたユーザーのアクセスを拒否する というエラーです。
状況としては、
●システムのインストールは成功している
●データベースは作ってある
●phpMyAdmin にはログインできる
●ユーザー名やパスワードは間違っていない
エラーメッセージからすると、ユーザー名やパスワードが間違っているのかと、いろいろ試したのですが状況は変わらず。
再度、サーバーの設定を確認していたら、データベースのポート番号が '3307' になっていました!
なぜそうなっていたのかはわかりませんが、localhost は '3306' なので、明示的に指定しなければつながりません。
が、そもそもポート番号を指定するところが無い!?
インストールしたシステムが php で作られていたので、ソースを覗いてみたら、データベースに接続する部分が、以下のようになっていました。
なので、ポート番号を指定するように書き換えました。
これで、
DB_HOST に、データベースのIPアドレス(localhost ではない)
DB_PORT に、データベースのポート番号('3307')
を指定することで、解決しました。
今回ハマった原因は、データベースのポート番号は '3306' だと思い込んでいたこと。
プログラムにポート番号を指定する箇所が無かったため、なかなか気づきませんでした。
「これはハマるだろうなぁ」
と思ったので、記事にしてみました。
どこかで購入(?)したシステムをインストールしたらしいのですが、データベースの接続時に、
SQLSTATE[42000] [1044] Access denied for user 'ユーザー名'@'localhost
というエラーが出ていました。
SQLSTATE[42000] [1044] は、指定されたユーザーのアクセスを拒否する というエラーです。
状況としては、
●システムのインストールは成功している
●データベースは作ってある
●phpMyAdmin にはログインできる
●ユーザー名やパスワードは間違っていない
エラーメッセージからすると、ユーザー名やパスワードが間違っているのかと、いろいろ試したのですが状況は変わらず。
再度、サーバーの設定を確認していたら、データベースのポート番号が '3307' になっていました!
なぜそうなっていたのかはわかりませんが、localhost は '3306' なので、明示的に指定しなければつながりません。
が、そもそもポート番号を指定するところが無い!?
インストールしたシステムが php で作られていたので、ソースを覗いてみたら、データベースに接続する部分が、以下のようになっていました。
$this->pdo = new PDO( sprintf('mysql:dbname=%s;host=%s;charset=utf8', DB_NAME, DB_HOST ), ・・・
なので、ポート番号を指定するように書き換えました。
$this->pdo = new PDO( sprintf('mysql:dbname=%s;host=%s;port=%s;charset=utf8', DB_NAME, DB_HOST, DB_PORT ), ・・・
これで、
DB_HOST に、データベースのIPアドレス(localhost ではない)
DB_PORT に、データベースのポート番号('3307')
を指定することで、解決しました。
今回ハマった原因は、データベースのポート番号は '3306' だと思い込んでいたこと。
プログラムにポート番号を指定する箇所が無かったため、なかなか気づきませんでした。
「これはハマるだろうなぁ」
と思ったので、記事にしてみました。
コメント 0