Laravelでパスワードを間違える!SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES):原因と解決策

はるか
はるか
このエラー、たまに見る。特に本番環境に移ったときとか。
ふゅか
ふゅか
そうね!原因と解決策をしっかり押さえれば大丈夫♪

SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

1. エラーの概要

SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)というエラーは、Laravelアプリケーションがデータベースに接続しようとした際に発生する一般的なエラーです。このエラーは、データベースユーザーの認証情報が正しくない場合に発生します。次の手順でこのエラーの原因を特定し、修正する方法を解説します。

1.1. .envファイルの確認

Laravelプロジェクトのルートディレクトリにある.envファイルにデータベース接続情報が含まれています。このファイルの内容を確認し、正しい認証情報が記載されていることを確認します。(特にパスワード)

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=root
DB_PASSWORD=your_password
  • DB_DATABASE:データベース名
  • DB_USERNAME:データベースユーザー名(ここではroot
  • DB_PASSWORD:データベースユーザーのパスワード

はるか
はるか
.envファイルに正しい情報を入れる。まずはそこから。
ふゅか
ふゅか
そうね、特にDB_USERNAMEとDB_PASSWORDが重要よ!確認してみてね。♪

2. エラーの検証と修正

SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: YES)というエラーをパスワードを間違えて実際に発生させます。

 

LaravelでSQLSTATE[42S02] Table ‘database.table’ doesn’t exist:問題と解決策

と似たコードを使用します。

ふゅか
ふゅか
エラーを実際に発生させてみるのも、学びの一つよね!
はるか
はるか
うん、実際にやってみると理解が深まる。

2.1. 検証環境

  • PHP 8.1.25
  • Laravel 10.48.12
  • Windows 11

2.2. プロジェクトの作成

まず、エラー検証を行うためのサンプルプロジェクトを作成します。

composer create-project laravel/laravel SampleProject

2.3. .envファイルの編集

存在しないデータベースを作成するために.envファイルを編集します。今回はDB_PASSWORDでパスワードを指定できるので、適当にdにします。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=root
DB_PASSWORD=d
はるか
はるか
今回の正しいパスワードは何も入力しない場合。

2.4. コントローラーの作成

次に、`Users` テーブルに登録されているユーザー数をカウントするコントローラーを作成します。ここでは、例として `SampleController` を作成します。

php artisan make:controller SampleController

作成したコントローラーに以下のメソッドを追加します。

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;

class SampleController extends Controller
{
    public function index(){
        $count = User::count();
        return response($count);
    }
}

このコードは、User テーブルのレコード数を取得してレスポンスとして返すプログラムです。

はるか
はるか
レコード数をカウントするだけ。シンプル。

2.5. ルーティング

次に、ルーティングを設定します。`web.php` ファイルで以下のようにルーティングを追加してください。

use App\Http\Controllers\SampleController;
Route::get('/', [SampleController::class, 'index']);

この設定により、ブラウザで http://127.0.0.1:8000/ にアクセスすると、SampleController の index メソッドが実行されます。

2.6. エラーの発生と検証

まず、ターミナルで以下のコマンドを実行します。

php artisan serve

次に、ブラウザで http://127.0.0.1:8000/ にアクセスします。すると、”SQLSTATE[HY000] [1049] Unknown database ‘database'” というエラーが発生します。

 

このエラーは、password が正しくないため発生します。.envファイルに正しいパスワードを入力する必要があります。

したがって、.envファイルを次のように編集します。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=root
DB_PASSWORD=

http://127.0.0.1:8000/ にアクセスして、エラーが解消されたことを確認します。

ということで、何もしていないので登録数が0として表示されました。

2.7. まとめ

SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: YES)エラーは、主にパスワードの間違いの修正によって解決できます。これらを確認し、問題が解決するか試してみてください。

PR