Laravel 5.でWebアプリケーションを構築しています。アプリケーションは、MySQLデータベースに保存されている「カテゴリ名」を取得し、新しい「カテゴリ名」を追加するフォームを表示するはずです。コマンドphp artisan serve
と http:// localhost:8000/admin/categories / に移動すると、次のエラーメッセージが表示されます。
PDOException in Connector.php line 50:
SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it.
スタックオーバーフローに関するいくつかの投稿によると、このエラーが発生した多くのユーザーは.envファイルを適切に構成しなかったため、PHP Data Object(PDO)のデフォルト設定を上書きします。 database.phpファイル.envファイルは以下で定義されます。
DB_Host=localhost
DB_DATABASE=Homestead
DB_USERNAME=Homestead
DB_PASSWORD=secret
また、database.phpファイル内のmysqlキーは次のように指定されます。
'mysql' => [
'driver' => 'mysql',
'Host' => env('DB_Host', 'localhost'),
'database' => env('DB_DATABASE', 'Homestead'),
'username' => env('DB_USERNAME', 'Homestead'),
'password' => env('DB_PASSWORD', 'secret'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
奇妙なことに、仮想マシンにSSH接続してmysql -uhomestead -psecret Homestead
、データベースに接続できます。問題は、Laravelが同じパラメーターで直接MySQLに接続できるのにMySQLに接続できないのはなぜですか?Laravelへのアクセスを拒否できるものは他にありますか?
Homestead.yamlで指定されたIPアドレスをlocalhostから192.168.10.10に変更しました。次に、Homestead provision
そしてそれは問題を解決するように思われた。ホストマシンは、ローカルホストまたは127.0.0.1が既にマップされているため、それを解決できません。
Wampserverでも同じ問題が発生しています。それは私のために働いた:
このファイルを変更する必要があります: "C:\ wamp\bin\mysql [mysql_version]\my.ini"例: "C:\ wamp\bin\mysql [mysql5.6.12]\my.ini"
そして、デフォルトのポート3306を80に変更します(両方の行20と27、)port = 3306 To port = 80
これがお役に立てば幸いです。
次に、コントロールパネルに移動して、ApacheとMySQLサービスを開始します。
なぜLaravel同じパラメーターで直接接続できるのにMySQLに接続できないのですか?
さあ、env('DB_Host', 'localhost')
はNULL
と同じではなく、env('DB_USERNAME', 'Homestead')
はHomestead
と同じではありません
明示的に提供されたリテラル、不在のパラメーター、または何らかの関数の結果のような、同じような異なる事項を「同じ」と呼ぶことはできません!それは3つです異なる問題!
どちらの場合もliterally同じパラメーターを指定した場合にのみ、「同じ」と言うことができます。
mysql -hlocalhost -uhomestead -psecret Homestead
シェル用
'mysql' => [
'driver' => 'mysql',
'Host' => 'localhost',
'database' => 'Homestead',
'username' => 'Homestead',
'password' => 'secret',
ララヴェルの。
私は同じ問題に直面し、インターネットですべての答えを読みましたが、誰も助けませんでした!最終的に答えを見つけたと私はこのソリューションが誰かを助けることを願っています。
DB_PORTを33060
に設定しただけで、問題は解決しました。
理由は次のとおりです。
異なるサーバーからDBにアクセスしようとする場合、直面するconmanの問題のほとんどはDBアクセスはlocalhost/127.0.0.1のみに制限されます
解決策:my.cnf
(Ubuntuでは再び/etc/mysql/my.cnf)
にあり、以下を変更できます:
bind-address = 0.0.0.0
または
bind-address = SERVER_PUBLIC_IP_ADDRESS
Rootユーザーで任意のIPからDBアクセスを提供することは安全ではないため、rootの代わりにdbユーザーを作成し、rootの使用を削除することをお勧めします。
同じサーバーからDBに接続しようとしている場合:
解決策:Unixソケットの代わりにTCP/IPを使用してください。接続時に、localhostの代わりに127.0.0.1を使用してこれを行います。ただし、Unixソケットはより高速で安全に使用できます。
変更後、mysqlサービスを再起動します
Sudo service mysql restart
私が変更され
DB_Host = localhost
に
DB_Host = localhost:3307
.envファイル内
同じ問題が一度発生しましたが、私自身の場合、ローカルサーバーで実行していました。私は後でエラーを発見しました:
"PDOException with a message 'SQLSTATE[HY000] [2002]
ターゲットマシンが積極的に拒否したため、接続できませんでした。」
私が開始していないからでしたApache and MySQL in Xampp
コントロールパネル。このため、アプリケーションは、結合がなかったため、目的の結果を取得できませんでした。
すぐに両方を開始しましたApache and MySQL
Xamppコントロールパネル、the error was fixed
。これがあなたのために働くことを願っています
Windowsでは、ユーザーアクセス許可(UAC)をオフにします。
プロンプトが表示されたら、ファイアウォールの通過を許可することを忘れないでください。
私の場合、DB_Host
の-。envファイルに、VM Homesteadのデフォルト(192.168.10.10)のようなアドレス)に書き込みました。 artisan migrate
に対してのみ機能しますが、アプリを使用してこのデータベースを「リモート」で接続するには、127.0.0.1のIPを使用する必要があります。
それが誰かを助けることを願っています。
XAMPPを確認します(使用している場合)。 xamppが有効になっていないかオフラインになっていることに気付くまで同じエラーが何度も発生したため、xamppを有効にすると、ようやく機能しました。
SQLiteデータベースでこのエラーが発生しました。 Laravelでは、データベースファイルが存在しない場合に作成される他の環境とは異なり、データベースファイルを手動で作成する必要がありました。作成しました後サーバーを実行しています。そして、これはこのエラーに私を導きます。サーバーの再起動後は問題ありませんでした。
時々キャッシュの問題:
php artisan config:clear