3
votes

Un artisan PHP renvoie l'accès refusé pour la connexion à la base de données dans Laravel

J'ai transféré un projet Laravel basé sur le déplacement d'un projet Laravel entre ordinateurs
Tout allait bien au premier regard. J'ai pu installer le composeur sans aucun problème, puis j'ai défini mes variables d'environnement dans mon .env telles que le nom de la base de données, l'utilisateur de la base de données, etc.


Quand j'ai commencé à utiliser la commande suivante,

php artisan cache: clear

J'ai eu ces deux erreurs,

Dans Connection.php ligne 664:
SQLSTATE [HY000] [1045] Accès refusé pour l'utilisateur 'root' @ 'localhost' (en utilisant le mot de passe: Oui) (SQL: sélectionnez * dans information_schema.tables où tabale_schema = *** et table_name = ****) p >

Dans Connector.php ligne 67:
SQLSTATE [HY000] [1045] Accès refusé pour l'utilisateur 'root' @ 'localhost' (en utilisant le mot de passe: Oui)

Informations complémentaires:

  1. Il semble que .env n'ait pas été lu par l'application car lorsque je navigue sur la page d'accueil de l'application, j'ai eu une erreur Whoops qui indique que la variable d'environnement est vide.  var vide
  2. J'ai testé ma connexion à la base de données, comme son nom d'utilisateur, son mot de passe et d'autres paramètres, je sais qu'ils fonctionnent correctement.

En fin de compte, j'ai joint une photo afin de développer le problème. issue

  1. Fait intéressant, dans mon fichier .env, la valeur DB_DATABASE est "nlp" et DB_USERNAME est égal à "Javad" mais comme vous pouvez le voir dans les erreurs, elles ne fonctionnent pas et l'Artisan assume la racine en tant qu'utilisateur! >


4 commentaires

Avez-vous la base de données et l'utilisateur de la base de données sur le nouvel environnement?


Je suis entré dans la base de données avec l'utilisateur et le mot de passe avec succès puis j'ai obtenu la liste des bases de données, enfin j'ai pu voir le nom de la base de données sur laquelle je travaille!


Essayez de supprimer le cache de configuration manuellement. Pour ce faire, supprimez: bootstrap / cache / config.php (ou renommez-le pour le conserver en sauvegarde).


Pourriez-vous également fournir les étapes exactes que vous avez effectuées du début jusqu'à l'erreur? Avez-vous installé exactement la même version des packages ou avez-vous fait une nouvelle installation de Laravel et plus de l'ancien code? Sur quelle version de Laravel êtes-vous?


3 Réponses :


0
votes

Après avoir déplacé un projet Laravel vers un autre emplacement, la première chose à faire est de régénérer APP_KEY dans le fichier .env en exécutant la commande depuis la racine de votre application répertoire:

php artisan db:seed

Après cela, vous reconfigurez votre cache:

php artisan migrate

De plus, assurez-vous que tous les paramètres de votre base de données sont dans votre . env et config / database.php sont corrects et identiques à votre configuration précédente de Laravel - Vous pouvez les modifier manuellement puis reconfigurer votre cache comme indiqué ci-dessus. Si ce n'est pas le cas (par exemple, le nom de la base de données est modifié), vous devrez peut-être réexécuter vos migrations de base de données et vos seeders:

php artisan config:cache

et

php artisan key:generate


9 commentaires

J'ai mentionné dans la 2ème partie de mes informations complémentaires que j'ai testé la connexion DB et qu'elles fonctionnent correctement!


À partir de votre message, cela signifie que vous n'avez pas configuré l'utilisateur "Javad" pour avoir un accès lecture à la base de données "nlp". si vous avez phpmyadmin ou mysql workbench, vous pouvez vérifier cela.


le problème n'est pas votre fichier .env . Vous devez accéder directement à votre base de données via la console ou toute autre interface utilisateur et vous assurer qu’un utilisateur nommé "Javad" dispose d’un accès en lecture et écriture à un utilisateur existant schéma de base de données nommé "nlp"


quel type de base de données utilisez-vous?


Mec, j'ai vérifié les autorisations, j'ai accordé à l'utilisateur ma base de données et il a des autorisations complètes sur CRUD sur les tables.


Essayez ensuite d'exécuter votre requête en dehors de votre application laravel. Utilisez la console de base de données ou un script de requête dans Phpmyadmin, pour voir si vous obtenez la même erreur


Je l'ai essayé dans la console, il est intéressant de noter que la colonne inconnue 'nlp' dans la clause where. J'ai testé cette requête: sélectionnez * de information_schema.tables où table_schema = nlp et table_name = page;


J'ai mis nlp et les pages entre guillemets, qc comme "" puis ça a marché


continuons cette discussion dans le chat .



0
votes

Je pense que les fichiers de configuration ne sont pas accessibles en écriture par l'utilisateur apache, étant donné que vous utilisez apache. Assurez-vous que vous avez donné l'autorisation d'écriture pour bootstrap / cache pour l'utilisateur. Ce répertoire contient les fichiers de configuration mis en cache.Si tel est le cas, les félicitations seront chargées à partir d'ici et votre configuration précédemment utilisée sera chargée, ce qui peut être à l'origine du problème.

Vous devez également donner une autorisation d'écriture sur le répertoire de stockage. Comme il y a le fichier journal et l'utilisateur apache doit également écrire dessus.


1 commentaires

J'ai changé l'autorisation de bootstrap / cache en 777 mais encore une fois j'ai eu les mêmes erreurs!



0
votes

Ouvrez le fichier .env et modifiez-le. Configurez simplement les informations d'identification de base de données correctes:

php artisan config:cache

Une fois la modification de .env terminée, entrez cette commande dans votre terminal pour effacer le cache:

DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=            // Your Database Name
DB_USERNAME=           // Your Database Username, If no username has been set then by default there is a root as a username
DB_PASSWORD=          // Your Database Password, If no password is set on the database, clear it  

S'il y a toujours la même erreur, essayez une autre solution possible.

J'ai également rencontré le même problème, j'ai essayé toutes les réponses possibles dans StackOverflow mais rien ne pouvait m'aider, cette solution a fonctionné du premier coup:

Si vous utilisez le serveur Web par défaut de PHP (par exemple php artisan serve ), vous devez redémarrer votre serveur après avoir modifié les valeurs de votre fichier .env .

J'ai trouvé cette solution d'ici laravel.io (Lire la solution de Byjml)


1 commentaires

Comme je l'ai écrit, j'ai testé toutes ces étapes et j'ai eu les mêmes erreurs!