🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

3回答

4720閲覧

Laravel6.7 でテーブルを作成しようとしていますが、エラーで作成されません

hidepon

総合スコア206

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/12/23 08:08

編集2019/12/25 05:34

PHP のフレームワークのLaravel でデータベースのテーブルを作成しようとしていますが

なぜか、実行するとエラーになります。
MySQLのバージョンは8.017です
データベースは作成済です。

Illuminate\Database\QueryException : SQLSTATE[HY000] [1045] Access denied for user 'database_user'@'localhost' (using password: NO) (SQL: select * from information_schema.tables where table_schema = Database_Name and table_name = migrations and table_type = 'BASE TABLE') at /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669 665| // If an exception occurs when attempting to run a query, we'll format the error 666| // message to include the bindings with SQL, which will make this exception a 667| // lot more helpful to the developer instead of just the database's errors. 668| catch (Exception $e) { > 669| throw new QueryException( 670| $query, $this->prepareBindings($bindings), $e 671| ); 672| } 673| Exception trace: 1 PDOException::("SQLSTATE[HY000] [1045] Access denied for user 'database_user'@'localhost' (using password: NO)") /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=Database_Name", "database_user", "", []) /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 Please use the argument -v to see more details.

となります。
該当するデータベースは作成されており、
コマンドラインからユーザー名、パスワードでログインでき、データベースにもアクセスできています。
.envのファイルにもユーザー名、パスワードを書き込んでいます。
対処方法が分からず困っています。よろしくお願いいたします。

(修正・追記)
すでに修正していますが、
Laravelのバージョン 6.7
MySQL 8.0.17
CentOS 8
です。

コマンドラインからユーザー名、パスワードでログインでき、データベースにもアクセスできています。
.envのファイルにもユーザー名、パスワードを書き込んでいますが、
パスワードが無い状態で認識されています。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE= DB_Name
DB_USERNAME=db_user
DB_PASSWORD=db_pass

(DB_DATABASE,DB_USERNAME,DB_PASSWORDはダミー)

config/database.phpを

'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'DB_Name'),
'username' => env('DB_USERNAME', 'db_user'),
'password' => env('DB_PASSWORD', 'db_pass'),
(以下省略)

と編集
コマンドラインで
php artisan config:clear
を実行しました。
php artisan migrate
をしたところ
エラーになります。

(追記)
パスワードの先頭に "#" を含んでいたためコメントと認識されていたようでした。
パスワードの記号部分を変更して
コマンドラインで
php artisan config:clear
を実行しました。
php artisan migrate
したところ、
エラーメッセージが変わりました。

SQLSTATE[HY000] [1045] Access denied for user 'user_name'@'localhost' (using password: YES) (SQL: select * from information_schema.tables where table_schema = DB_Name and table_name = migrations and table_type = 'BASE TABLE') PDOException::("SQLSTATE[HY000] [1045] Access denied for user 'user_name'@'localhost' (using password: YES)") /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=DB_Name", "user_name", "password", []) /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

となっています。
database/migration.php
にあるファイルのテーブルを作成しようとしているのですが、
エラーになってテーブル作成が出来ません。

(修正)
記述ミスがありました。
database/migrations ディレクトリにある
日付_create_(テーブル名).php
というファイルのテーブルを作成しようと
php artisan migrate
を実行しましたが、
上記のようなエラーが出ます。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/12/23 08:15

php artisan config:clear  は実行しましたか?
hidepon

2019/12/23 10:37

ご返答有難うございます。 こちら実行しています。 改めて実行しましたが、状況に変化はありませんでした。 宜しくお願いいたします。
退会済みユーザー

退会済みユーザー

2019/12/23 11:00 編集

> 状況に変化はありませんでした これは単純にmigrationに失敗したということでしかありませんよね? エラーメッセージは一言一句同じだったということではありませんよね?
退会済みユーザー

退会済みユーザー

2019/12/23 11:08 編集

php artisan config:clear  を行うことで、何がどのように変化し、なんの目的で行うのかを理解しているのでしょうか?
hidepon

2019/12/23 11:12

ご返答有難うございます。先ほど確認したのですが、エラーメッセージは同一でした。
hidepon

2019/12/23 11:14

キャッシュをクリアするということですよね!?
hidepon

2019/12/23 11:17

Configuration cache cleared! というメッセージが表示されます。 .envファイルの内容が反映されるはずですよね。。。。 認識が違ってるでしょうか??
hidepon

2019/12/23 11:22

mysql のuser の作りが悪いのかもしれませんね。。。ちょっと考えてみます。
退会済みユーザー

退会済みユーザー

2019/12/23 11:25

表面的なことしか理解していないようなので解説(回答)します。
guest

回答3

0

SQLSTATE[HY000] [1045] Access denied for user 'database_user'@'localhost' (using password: NO) (SQL: select * from information_schema.tables where table_schema = Database_Name and table_name = migrations and table_type = 'BASE TABLE')

このエラーメッセージから何がわかるのか?

ユーザー名: database_user
ホスト名: localhost
データベース名: Database_Name
パスワード: 未設定

こういう条件で接続しようとしてエラーになったということです。

では、.env の設定はどうなっているのか?

 上記の設定どおりならば、

DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=Database_Name DB_USERNAME=database_user DB_PASSWORD=

こうなっているはず。

こうなっていないのであれば、.env の変更が反映されていないということを疑う。

.env の設定値は、bootstrap/cache/config.php というキャッシュファイルに反映され、config/database.php から読まれる。

なので、.env を編集した後では、必ず、php artisan config:clear を実行しなくてはならない。
ただし、bootstrap に書き込み権限がなければ、作成も削除もできないので、適切に書き込み権限が与えられていることが必要。
この辺りはマニュアルにもしっかり書かれているが、初心者は読み飛ばしているケースが多い。

投稿2019/12/23 11:34

編集2019/12/23 13:31
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mikkame

2019/12/23 13:04

ややこしいんですが cache:clearはキャッシュの破棄で、コンフィギュのキャッシュはconfig:clearです。 また、一度config:clearを行うと、次回からキャッシュを使用せずに.envを参照するはずです (5.5系の知識です、間違ってたらすみません)
退会済みユーザー

退会済みユーザー

2019/12/23 13:30

@mikkame さん 本文書くときに間違ってたみたいです。 修正しておきます。
hidepon

2019/12/23 14:19

bootstrap/cache/config.php というファイルが生成されていないです。 bootstrapのディレクトリには775の権限を与えています。 config :clear をしても反映されないです。。。。
退会済みユーザー

退会済みユーザー

2019/12/23 14:32

ファイルがないならそもそも権限がない可能性がたかい。 ファイルがないばあい、envの内容で接続されるので、接続情報が間違っていることが確定です。
hidepon

2019/12/23 14:38

GRANT ALL ON Database_Name.* TO 'database_user'; としているのですが。。。。
退会済みユーザー

退会済みユーザー

2019/12/23 14:48

GRANT するだけじゃ、権限は反映しませんが。
hidepon

2019/12/23 14:49

もう一つユーザを作ってみました。 CREATE USER 'testt_user' IDENTIFIED BY 'password'; GRANT ALL ON Database_Name.* TO 'test_user'; FLUSH PRIVILEGES; SHOW GRANTS FOR 'test_user'; で確認するとgrant文が表示されます。
退会済みユーザー

退会済みユーザー

2019/12/23 14:51

testt_user というユーザーを作っているのに、test_userを確認してなんになるんですか?
hidepon

2019/12/23 14:54

タイプミスです。test_user で共通しています。 すみません。
hidepon

2019/12/23 14:55

(訂正します。) もう一つユーザを作ってみました。 CREATE USER 'test_user' IDENTIFIED BY 'password'; GRANT ALL ON Database_Name.* TO 'test_user'; FLUSH PRIVILEGES; SHOW GRANTS FOR 'test_user'; で確認するとgrant文が表示されます
退会済みユーザー

退会済みユーザー

2019/12/23 14:56

mysql -h localhost -u test_user -D Database_Name -P 3306 -p でログインできるかを確認する方が確実だと思いません?
hidepon

2019/12/24 01:38

SSHで接続した際にコマンドでログインできる子とは確認済みです。 migrate した際にエラーが出る原因が、分かりません・・・・という状況です。
退会済みユーザー

退会済みユーザー

2019/12/24 01:53

まさかとは思いますが、サーバー側でマイグレーションせずに、ローカルでやってません?
hidepon

2019/12/24 02:05

SSHでリモートのサーバーに接続しています。 https://qiita.com/mikaku/items/8e081e08090e814a57db に database.php を修正してと書いているので、試してみました。 エラーメッセージが PDOException::("SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO)") PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=Database_Name", "root", "", []) と変わりました。 .envにパスワードを設定しているんですが、空欄と認識されています。 php artisan config:clear php artisan migrate としてもエラーが出ます
hidepon

2019/12/24 02:14

database.phpって編集しなくても良いような気がしますが・・・・
退会済みユーザー

退会済みユーザー

2019/12/24 02:47

sshで接続っていってもlaravel になんの関係があるの? URLのページ名に関係するの。?
hidepon

2019/12/24 02:55

リモートのサーバにて作業しています。
退会済みユーザー

退会済みユーザー

2019/12/24 02:59 編集

SSHで接続って、ローカルのファイルからリモートのMySQLに繋ごうとしているということ? Laravleのファイルはリモートサーバー上? それともローカル?
hidepon

2019/12/24 03:01

Lamp環境ですべて同一のサーバ上にあります。Laravelも当然同一サーバー上です
退会済みユーザー

退会済みユーザー

2019/12/24 03:05 編集

それで繋がらないわけないんだけど、おそらく、私の想像の及ぶ範囲でこれ以上回答は不可能です。 おそらくはあれこれいじって、説明していない作業などがあるものと思われます。
hidepon

2019/12/24 03:06

いろいろとご助言を頂き、有難うございました。
hidepon

2019/12/24 06:38

Laravelのバージョンは6.7 でMySQLのバージョンは8.0.17です。
退会済みユーザー

退会済みユーザー

2019/12/24 08:47

dd(\config('DB_PASSWORD')); を実行して、値が取れるかを確認しては? 取れなかっらた、.env の内容を隠すことなく出してもらうしかない。
hidepon

2019/12/24 13:41

追記の形で上記の本分に記入しました。
退会済みユーザー

退会済みユーザー

2019/12/24 13:51

隠すことなく出してもらうといっているにもかかわらず、ダミーで出すなら意味がありません。 お手伝いはここで修了します。
hidepon

2019/12/24 14:01

実際に上記のDB名、ユーザー名、パスワードにしても同じ結果になるのですが。。。特段おかしい文字種を使っているという訳ではありません。 ご厚意に感謝いたします。 有難うございます。
退会済みユーザー

退会済みユーザー

2019/12/25 04:20

> ただ、パスワードの先頭に # が入っているのが問題なのではないかと思えてきました やっと出たか。 > 特段おかしい文字種を使っているという訳 思い込みがあると回答者を困らせるだけ。だから隠さず出せと言ったのに。 DB_PASSWORD="#password" のように、ダブルコーテーションで囲むこと
guest

0

ベストアンサー

$ mysql -h 127.0.0.1 -u db_user -D DB_Name -P 3306 -pdb_pass

まず db_user@127.0.0.1 ユーザーでMySQLに接続できていますか?

$ php artisan tinker config('database.default'); config('database.connections.mysql.host'); config('database.connections.mysql.port'); config('database.connections.mysql.database'); config('database.connections.mysql.username'); config('database.connections.mysql.password');

.env に設定されたデータベース設定は反映されてますか?
tinkerコマンドでデータベース設定値を確認してください。

$ echo $DB_CONNECTION $ echo $DB_HOST $ echo $DB_PORT $ echo $DB_DATABASE $ echo $DB_USERNAME $ echo $DB_PASSWORD

サーバー環境変数が設定されている場合、.env よりサーバー環境変数が優先されます。
あまりない気がしますが念のためご確認ください。

投稿2019/12/25 02:27

ucan-lab

総合スコア888

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hidepon

2019/12/25 03:34

ご返答頂き有難うございます。 コマンドラインでDBの接続は確認できています。 php artisan tinker の使い方が理解できていないため、 config の情報が表示されるまでに至っていません。
hidepon

2019/12/25 04:16

教えて頂いた内容を理解できました。 php artisan tinker の後に config('database.default'); をすると "mysql" 同様に config('database.connections.mysql.host'); "127.0.0.1" config('database.connections.mysql.port'); "3306" config('database.connections.mysql.database'); "DB_Name" (※ダミーです) config('database.connections.mysql.username'); ”user_name” (※ダミーです) config('database.connections.mysql.password'); "" となぜか、パスワード部分のみが空欄で返ってきます。 これがエラーの原因かと思えてきました。 実際には.envには書き込まれています。 ただ、パスワードの先頭に # が入っているのが問題なのではないかと思えてきました。 コマンドラインではOKで、Laravel 経由では認識が違うのでしょうか?
ucan-lab

2019/12/25 04:27 編集

.env の # はコメント行になります。 # は削除して有効にして再度 config('database.connections.mysql.password'); でパスワード値を取得できるか確認してください。
hidepon

2019/12/25 04:30

そのようですね・・・・ 先頭にあった#を中央に移し替えたら、#以降の部分が消えました。 こんな落とし穴があるんですね。。。。ちょっとやってみます。
ucan-lab

2019/12/25 05:05 編集

> 先頭にあった#を中央に移し替えたら、#以降の部分が消えました。 消えたというのが意味がよく分からないのですが... DB_PASSWORD=#password このように設定された場合は # 以降はコメント行扱いになるので、 DB_PASSWORD= と設定したのと同じことになります。 これは落とし穴というかプログラミング全般に言えるので特殊文字を扱う場合は常に意識してください。 DB_PASSWORD='#password' と囲ってあげれば文字列として認識されます。
hidepon

2019/12/25 05:37

ご返答有難うございます。 コマンドラインとプログラムでこのような違いがあるとは思いませんでした。 今、テーブルを作成しようと php artisan migrate をしたのですが、なぜか、テーブルが生成されません。 なんか、変な感じです。 もちろん自分のミスがどこかにあるとは思うのですが。。。。 引き続きよろしくお願いいたします。
ucan-lab

2019/12/25 06:04 編集

> コマンドラインとプログラムでこのような違いがあるとは思いませんでした。 よくあるので今後は注意しましょう! > SQLSTATE[HY000] [1045] Access denied for user 'user_name'@'localhost' (using password: YES) このエラーメッセージの原因はこのどっちかです。 ・user_name@localhost のパスワードが間違っている ・user_name@localhost が存在しない 大体さっきの問題と変わらないですが、パスワードが使用されて接続を試みてることはわかりますね。 mysql.user テーブルを確認した方がいいです。 SELECT user, host, plugin FROM mysql.user;
hidepon

2019/12/25 06:25

わけわからなくなったので、再度一般ユーザのパスワードを更新しました。 そのあとで php artisan config:clear を実行しました。 php artisan migrate を実行するとテーブルが生成されました。 有難うございました。 もしかしたら、.envのファイルを保存していなかったか?clearしていなかったかのどちらかもしれません。 本当に有難うございました。
ucan-lab

2019/12/25 06:30

tinker で確認した config('database.connections.mysql.password'); の値が正しかったのであれば .envを保存していなかったやconfig:clearしてなかったかの問題はなさそうです。 複数のことを一度にやってしまうと原因の特定が難しくなるので、 変更したら横着せずに1つ1つ検証するようにしてください。 ひとまずはマイグレーションできるようになってよかったです! おめでとうございます!
hidepon

2019/12/25 06:42

素晴らしいアドバイスを頂き有難うございました。 バージョンが変わるとこんなに変わるのか?と思っていたら、パスワードのコメント化という、つまらない部分で、のたうち回っていました。 お恥ずかしいです。 本当に有難うございました。
guest

0

ログイン情報が間違っている場合と、権限周りの切り分けの確認方法?をみつけたので書いておきます

DB::select('SHOW DATABASES');

を実行した時(tinker or適当なroute/controllerで試してください)

Illuminate/Database/QueryException with message 'SQLSTATE[HY000] [1044] Access denied for user 'dev'@'%' to database 'aaa' (SQL: SHOW DATABASES)'

の時、データベースへのアクセス権がない可能性が高い(今回は存在しないデータベース名aaaを使用)

Illuminate/Database/QueryException with message 'SQLSTATE[HY000] [1045] Access denied for user 'dev'@'192.168.48.7' (using password: YES) (SQL: SHOW DATABASES)'

の時、パスワードが間違っている(適当なパスワードにしました)

投稿2019/12/23 14:48

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hidepon

2019/12/24 03:28

どうも.envの中身のパスワードが認識できていないように思います。 ユーザー名が表示されて、パスワードの部分が空欄のような認識のようで・・・ 権限も設定しているのですが、なぜかうまくいきません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問