Je construis une application Web dans Laravel 5. L'application est supposée obtenir les "noms de catégorie" stockés dans une base de données MySQL et afficher un formulaire permettant d'ajouter de nouveaux "noms de catégorie". Lorsque j'exécute la commande php artisan serve
et que je navigue vers http: // localhost: 8000/admin/categories/ , je reçois le message d'erreur suivant:
PDOException in Connector.php line 50:
SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it.
Selon plusieurs articles que j'ai lus sur le dépassement de pile, de nombreux utilisateurs rencontrant cette erreur ne configurent pas correctement le fichier .env, qui remplace les paramètres par défaut de l'objet de données PHP, comme spécifié dans le fichier database.php . Le fichier .env est défini ci-dessous:
DB_Host=localhost
DB_DATABASE=Homestead
DB_USERNAME=Homestead
DB_PASSWORD=secret
Et la clé mysql dans le fichier database.php est donnée comme suit:
'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,
Bizarrement, lorsque je ssh sur ma machine virtuelle et que je lance mysql -uhomestead -psecret Homestead
, je peux me connecter à la base de données. La question qui se pose est la suivante: pourquoi Laravel ne parvient-il pas à se connecter à MySQL alors que je peux me connecter directement avec les mêmes paramètres? Quoi d'autre pourrait nier l'accès à Laravel?
J'ai changé l'adresse IP spécifiée dans le fichier Homestead.yaml de localhost à 192.168.10.10. Ensuite, j'ai exécuté Homestead provision
et cela a semblé résoudre le problème. La machine hôte ne peut pas résoudre localhost ou 127.0.0.1 car ce dernier est déjà mappé sur lui-même.
J'ai le même problème avec Wampserver. Cela a fonctionné pour moi:
Vous devez changer ce fichier: "C:\wamp\bin\mysql [mysql_version]\my.ini" Par exemple: "C:\wamp\bin\mysql [mysql5.6.12]\my.ini"
Et changez le port par défaut 3306 en 80. (Lignes 20 et 27, dans les deux cas) Port = 3306 Au port = 80
J'espère que ceci est utile.
Ensuite, accédez à votre panneau de configuration et démarrez Apache & MySQL Services.
pourquoi Laravel ne parvient-il pas à se connecter à MySQL alors que je peux me connecter directement avec les mêmes paramètres?
Allez, env('DB_Host', 'localhost')
n'est nulle part identique à NULL
et env('DB_USERNAME', 'Homestead')
n'est nulle part identique à Homestead
Vous ne pouvez pas appeler "le même" des sujets aussi différents que littéral fourni explicitement, un paramètre absent ou le résultat d'une fonction! C'est trois différent / questions!
Vous ne pouvez dire "le même" que si vous fournissez littéralement les mêmes paramètres dans les deux cas:
mysql -hlocalhost -uhomestead -psecret Homestead
pour la coquille, et
'mysql' => [
'driver' => 'mysql',
'Host' => 'localhost',
'database' => 'Homestead',
'username' => 'Homestead',
'password' => 'secret',
pour Laravel.
J'ai fait face au même problème et j'ai lu toutes les réponses sur Internet, mais aucune d'entre elles n'a aidé! a finalement trouvé la réponse et j'espère que cette solution aidera quelqu'un.
Je viens de définir mon DB_PORT à 33060
et le problème résolu.
Les raisons peuvent être:
Si vous essayez d'accéder à la base de données à partir de serveur différent , la plupart des problèmes rencontrés sont l'accès à la base de données est limité à localhost/127.0.0.1
Solution: Vous pouvez modifier my.cnf
(sous Ubuntu à nouveau dans /etc/mysql/my.cnf)
et modifier les éléments suivants:
bind-address = 0.0.0.0
ou
bind-address = SERVER_PUBLIC_IP_ADDRESS
Je recommande de créer un utilisateur de base de données au lieu de root et de supprimer l’utilisation de la racine car il n’est pas sécurisé de fournir un accès à la base de données à partir d’une adresse IP de l’utilisateur root.
Si vous essayez de connecter une base de données à partir du même serveur:
Solution: utilisez simplement TCP/IP au lieu du socket Unix. Pour ce faire, utilisez 127.0.0.1 au lieu de localhost lorsque vous vous connectez. Le socket Unix pourrait être plus rapide et plus sûr à utiliser, cependant.
Une fois les modifications apportées, vous avez redémarré le service mysql
Sudo service mysql restart
J'ai changé
DB_Host = localhost
à
DB_Host = localhost: 3307
en fichier .env
J'ai eu le même problème une fois, mais dans mon cas, je courais sur le serveur local. J'ai découvert plus tard que l'erreur:
"PDOException with a message 'SQLSTATE[HY000] [2002]
Aucune connexion n'a pu être établie car la machine cible l'a activement refusée. "
c’est parce que je n’ai pas démarré le panneau de configuration Apache and MySQL in Xampp
;
Immédiatement, j'ai lancé les deux Apache and MySQL
dans le panneau de configuration de Xampp, the error was fixed
. J'espère que cela fonctionne pour toi
Dans Windows, désactivez simplement User Access Persimissions (UAC) .. ouvrez la ligne - tapez msconfing et appuyez sur Entrée - allez dans Outils et cherchez.UAC - .-redémarrer le PC, ce sera
N'oubliez pas d'autoriser le pare-feu lorsque vous y êtes invité.
Dans mon cas, j'avais écrit dans le fichier .env dans DB_Host
l'adresse du VM comme valeur par défaut du Homestead (192.168.10.10). Mais cela ne fonctionne que pour artisan migrate
. Toutefois, l'utilisation d'applications pour connecter cette base de données "à distance" nécessite l'utilisation d'une adresse IP de 127.0.0.1.
J'espère que ça va aider quelqu'un.
J'ai eu cette erreur avec la base de données SQLite. Contrairement à d'autres environnements, où le fichier de base de données peut être créé s'il n'existe pas, dans Laravel, j'ai dû créer manuellement le fichier de base de données. Je l'ai créé après en cours d'exécution sur mon serveur; et cela m'a conduit à cette erreur. Après avoir redémarré le serveur, tout était ok.
parfois, peut-être un problème de mise en cache:
php artisan config:clear