LaravelでSQLSTATE[HY000] [1049] Unknown database 'database':問題と解決策

はるか
はるか
SUnknown database ‘database’、データベースが存在しないから出る。
ふゅか
ふゅか
そうなのね!じゃあ、どんな原因があるのか見てみよう。

1. SQLSTATE[HY000] 問題の概要

このエラーは、Laravelアプリケーションが接続しようとしているデータベースが存在しない場合に発生します。具体的には、データベース接続を試みる際に、指定されたデータベース名がMySQLサーバーに見つからないときに出現します。

SQLSTATE[HY000] [1049] Unknown database 'database'

1.1. 原因

次のような原因が考えられます。

  1. データベースが存在しない
    • データベースがMySQLサーバー上に作成されていない。
  2. .envファイルの設定ミス
    • Laravelの環境設定ファイルである.envファイルに誤ったデータベース名が記載されている。
  3. キャッシュの問題
    • 環境設定がキャッシュされており、更新された.envファイルの内容が反映されていない。

はるか
はるか
データベースがないか、設定ミスか、キャッシュの問題。

ふゅか
ふゅか
キャッシュって意外と見落としがちよね!じゃあ、それぞれ解決策を見てみよう。

2. 解決策

2.1. データベースの存在確認

まず、MySQLにログインし、指定されたデータベースが存在するか確認します。

mysql -u your_username -p
SHOW DATABASES;

指定されたデータベースがリストにない場合、以下のコマンドでデータベースを作成します。

CREATE DATABASE your_database_name;

phpmyadminで確認する場合はhttp://localhost/phpmyadmin/に移動して、データベースが存在するか確認します。

2.1.1. Xamppを使用している場合

Xamppを使用している場合は、shellをクリックしてログインしてください。


はるか
はるか
Xampp使ってるなら、shellからでも確認できる。

2.2. .envファイルの確認

.envファイルを開き、DB_DATABASEの値が正しいか確認します。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password
ふゅか
ふゅか
.envファイルの設定も要チェックね。

はるか
はるか
設定ミスはよくある。気をつけて。

DB_DATABASEの値が実際に存在するデータベース名と一致していることを確認してください。

2.3. キャッシュのクリア

環境設定がキャッシュされている場合、設定変更が反映されないことがあります。以下のコマンドでキャッシュをクリアします。

php artisan config:cache
php artisan config:clear

このコマンドを実行することで、新しい設定が適用されます。

2.4. マイグレーションの実行

データベースが存在し、.envファイルの設定が正しいことを確認したら、データベースマイグレーションを実行してテーブルを作成します。

php artisan migrate
はるか
はるか
マイグレーションをうっかり忘れてるかも。

3. エラーの検証と修正

SQLSTATE[HY000] [1049] Unknown database ‘database’ というエラーを実際に発生させます。

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

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

ふゅか
ふゅか
エラーを実際に発生させてみよう!これで原因と解決策がよくわかるわ。
はるか
はるか
実際にやると理解が深まる。

3.1. 検証環境

  • PHP 8.1.25
  • Laravel 10.48.12
  • Windows 11

3.2. プロジェクトの作成

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

composer create-project laravel/laravel SampleProject

3.3. .envファイルの編集

存在しないデータベースを作成するために.envファイルを編集します。今回はDB_DATABASEで名前を指定できるので、databaseという名前にします。

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

はるか
はるか
.envファイルを編集。データベース名は”database”にする。
ふゅか
ふゅか
存在しないデータベース名を設定することでエラーを再現するのね!

3.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 テーブルのレコード数を取得してレスポンスとして返すプログラムです。

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

3.5. ルーティング

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

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

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

3.6. エラーの発生と検証

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

php artisan serve

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

このエラーは、database が存在しないために発生します。したがって、マイグレーションを行う必要があります。

ターミナルで以下のコマンドを実行して、マイグレーションを実行します。

php artisan migrate

Warn(警告)としてデータベースが存在しないということがでてきますが、yesを選択してマイグレーションを実行します。

これにより、database が作成されて、テーブルが作成されます。
再度 http://127.0.0.1:8000/ にアクセスして、エラーが解消されたことを確認します。

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

ふゅか
ふゅか
マイグレーションを実行して、データベースとテーブルを作成しましょう!これでエラーが解消されるはずよ。
はるか
はるか
ブラウザで確認。エラーがなくなった。

3.7. まとめ

SQLSTATE[HY000] [1049] Unknown database ‘database’エラーは、主にデータベースの存在確認や環境設定の修正によって解決できます。これらを確認し、問題が解決するか試してみてください。

PR