So-net無料ブログ作成
検索選択

SQLSTATE[42000] [1044] でアクセスできない!? [php]

先日、「サーバーを新しくしたらプログラムが動かない」というので、見に行ったのですがハマりました。

どこかで購入(?)したシステムをインストールしたらしいのですが、データベースの接続時に、

 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' だと思い込んでいたこと。
プログラムにポート番号を指定する箇所が無かったため、なかなか気づきませんでした。

「これはハマるだろうなぁ」
と思ったので、記事にしてみました。




nice!(1)  コメント(0)  トラックバック(0) 

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

トラックバックの受付は締め切りました