SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: YES) エラーの解決方法
みなさんこんにちは!ワトスンです。
今回は以下のようなエラーが出たときの対処録を残しておきます。
SQLSTATE[HY000] [1045] Access denied for user 'host名'@'localhost' (using password: YES)
このエラーは、データベースとの接続が拒否された際に表示されるエラーです。
「rootユーザーがlocalhostからアクセスできません(パスワードは大丈夫)」ということです。
データベースにユーザとパスワード、権限を正しく設定しているにもかかわらず、上記のエラーでMysqlに接続できない人向けの記事です。
エラーが出たときの元コード
エラーが出たときは以下のようなコードで実行していました。
$my_nam=htmlspecialchars($_POST["n"], ENT_QUOTES);
$my_mes=htmlspecialchars($_POST["m"], ENT_QUOTES);
$dsn= "mysql:host=localhost;port=3306;dbname=db;charset=utf8";
try{
$db = new PDO($dsn,"root","root");
$db->query("INSERT INTO tb (ban,nam,mes,dat)
VALUES (NULL,'$my_nam','$my_mes',NOW())");
print "書き込みに成功!";
}catch (Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
改善後のコード
$db = new PDO($dsn,"root","root");
この部分を
$db = new PDO($dsn,"root","");
のように変更しました。
PDOについては「PDOとは」をご覧ください。
私の場合は、上記のようにrootを削除しただけで解決しました。
データベースの特権の情報(パスワード)と違いがあったようです。
$db = new PDO('サーバー名', 'ユーザー名', 'パスワード');
サーバー名、ユーザー名、パスワードに間違いがないかもう一度確認してみて下さい。
私の場合はこの解決策で対応できましたが、これでも解決できない場合は「SQLSTATE[HY000] [1045] Access denied for userの解消」も参考にしてみて下さい。
一応どなたかのためになるように記事にしてみました!参考までに。
なにか疑問点がありましたらコメントまたはTwitterのDMでご連絡ください!
以上です。