SQLSTATE HY000 2002 対象のコンピューターによって拒否 され たため 接続 できません で した

Show

select.txtの各行の情報を持つチェックボックスを表示し、送信するプログラムがquiz.phpなのですが、表示されるボックス名は各行の1列目で、この1列目を取得したいのですが、 どうすればいいでしょうか? 取得し、そしてFORM送信し、POSTで受け取りたいのですが・・・。 なんか上手くいかなくって。 select.txt 漢字,1,0,1,0,1,0.5,1,0,1,0 漢字,1,0,1,0,1,0.2,1,9,1,0 漢字,1,3,1,0,1,0,1,0,1,9 漢字,1,0,1,0,1,0.5,1,0,1,0 漢字,1,0,1,0,1,0.2,1,9,1,0 漢字,1,3,1,0,1,0,1,0,1,9 漢字,1,0,1,0,1,0.5,1,0,1,0 漢字,1,0,1,0,1,0.2,1,9,1,0 漢字,1,3,1,0,1,0,1,0,1,9 quiz.php <form method="post"> <?php //<br>を加えた所で改行されている模様。 $checked = 0; foreach (file($selfile,FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) printf('<input type="radio" name="sel" value="%s"%s>%s <br>'. PHP_EOL, explode(',', $line)[0], $checked++ ? '' : ' checked', explode(',', $line)[1]); ?> <br> <!-- 状態送信、radio押さず更新すると2枚引きになる? --> <input type="hidden" name="name" value="<?php echo $name ?>"> <input type="hidden" name="turn" value="<?php echo $turn ?>"> <input type="hidden" name="action" value="<?php echo $action ?>"> <input type="radio" name="radio" value="1" checked>使う <input type="radio" name="radio" value="2">捨てる <br> <button>更新</button> </form>

  • 2021/07/28
  • 2021/07/27
  • PisukeCode - Web開発まとめ

僕がPHPフレームワークにLaravelを使ってます。

便利な反面、設定に手こずることも度々です。

今回遭遇したのは次の問題

「データベース設定が上手くできない!」

この設定方法が分からなかったので、
LaravelでのDB設定の正しい手順をメモしておきます。

このページの目次

  • 1.まず.envファイルからデータベース設定変更
  • 2.次にdatabase.phpでデータベース接続情報を設定
  • 最後にデータベース設定をmigrateする
    • もし migrateでエラーが出るならキャッシュ削除

1.まず.envファイルからデータベース設定変更

この.envファイルは以下のパスにあります。

▼ このパスにある(適宜読み替え)

このファイルは後述のdatabase.phpにおけるデフォルトのデータベース接続情報を保有しているファイルです。(データベースのみでなく、Laravelの環境変数の設定用)

そして以下のような部分を探してみてください。

▼ このようなデータベース設定があるはず

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=laravel

DB_USERNAME=root

DB_PASSWORD=

なんかデフォルト設定が書いてあります。当然これだとデータベースに接続できないので、例えば以下のように正しいデータベース接続情報に変更します。

▼ このように変更修正

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=【データベース名】

DB_USERNAME=【DBユーザー名】

DB_PASSWORD=【DBパスワード】

正直言って、この.envファイルでのDB設定はあまり重要ではありません。次に紹介するdatabase.phpの設定の方が柔軟に対応できます。

この .env ファイルはデータベースのみならず、全てのLaravel設定の起点になります。この設定が肝心なので忘れてはいけません。

2.次にdatabase.phpでデータベース接続情報を設定

お次はdatabase.phpを開いてください。

▼ こちらのパスにあるファイル

[Laravelインストール先]/config/database.php

このファイルは文字通りデータベースに関するアレコレ(主にDB接続情報)を設定変更できるファイルです。開くと色々書いてあります。

その中で次の部分がmysql接続情報です。

▼ デフォルトだと次の内容になってる

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

'mysql'=>[

    'driver'=>'mysql',

    'url'=>env('DATABASE_URL'),

    'host' =>env('DB_HOST','127.0.0.1'),

    'port'=>env('DB_PORT','3306'),

    'database'=> env('DB_DATABASE','forge'),

    'username'=>env('DB_USERNAME','forge'),

    'password'=> env('DB_PASSWORD',''),

    'unix_socket'=>env('DB_SOCKET',''),

    'charset'=> 'utf8mb4',

    'collation'=>'utf8mb4_unicode_ci',

    'prefix'=>'',

    'prefix_indexes'=>true,

    'strict' =>true,

    'engine'=>null,

    'options'=>extension_loaded('pdo_mysql')?array_filter([

        PDO::MYSQL_ATTR_SSL_CA =>env('MYSQL_ATTR_SSL_CA'),

    ]):[],

],

ここを正しいデータベース接続情報に変更します。

▼ このように変更修正する

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

'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名】'),

    'username'=>env('DB_USERNAME','【DBユーザー名】'),

    'password'=> env('DB_PASSWORD','【DBパスワード】'),

    'unix_socket'=>env('DB_SOCKET',''),

    'charset'=> 'utf8mb4',

    'collation'=>'utf8mb4_unicode_ci',

    'prefix'=>'',

    'prefix_indexes'=>true,

    'strict' =>true,

    'engine'=>null,

    'options'=>extension_loaded('pdo_mysql')?array_filter([

        PDO::MYSQL_ATTR_SSL_CA =>env('MYSQL_ATTR_SSL_CA'),

    ]):[],

],

絶対に変更すべき箇所は次の3つ

  • DB_DATABASE
  • DB_USERNAME
  • DB_PASSWORD

それから 'collation'=>'utf8mb4_unicode_ci'  という部分がありますが、これが照合順序です。こちらもデータベースの照合順序に変更してください。

あとは多分変更しなくてOK。そのままで大丈夫です。

最後にデータベース設定をmigrateする

最後に次のようなコマンドを実行

これで次のような表示になれば成功です。

Migration table created successfully.

Migrating: 2014_10_12_000000_create_users_table

Migrated:  2014_10_12_000000_create_users_table (22.94ms)

Migrating: 2014_10_12_100000_create_password_resets_table

Migrated:  2014_10_12_100000_create_password_resets_table (23.76ms)

Migrating: 2019_08_19_000000_create_failed_jobs_table

Migrated:  2019_08_19_000000_create_failed_jobs_table (21.22ms)

ちなみに僕の環境での表示例なので参考までに・・・とりあえず succefully と出ていれば成功です。(エラーが出ていなければOK)

もし migrateでエラーが出るならキャッシュ削除

この時エラーが出ることがあります。

▼ 例えばこういう感じのエラー

C:\xampp\htdocs\example.com\laravel\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70

PDOException::("SQLSTATE[HY000] [2002] 対象のコンピューターによって拒否されたため、接続できませんでし た。")

C:\xampp\htdocs\example.com\laravel\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70

PDO::__construct("mysql:host=127.0.0.1;port=;dbname=hogehoge", "root", "mypassword", [])

そういう場合は次のコマンドを実行してください。

▼ 設定キャッシュを削除

▼ キャッシュも削除

これで再び php artisan migrate してみると上手くいくこともあります。もちろんデータベース接続情報が間違っていないかの確認もお忘れなく・・・

関連記事