web-dev-qa-db-fra.com

"Échec de la connexion: accès refusé pour l'utilisateur 'root' @ 'localhost' (avec mot de passe: YES)" depuis la fonction php

J'ai écrit une fonction utilisée par une page web php, afin d'interagir avec une base de données mysql. Lorsque je les teste sur mon serveur, j'obtiens cette erreur:

"Connect failed: Access denied for user 'root'@'localhost' (using password: YES)" 

Je suis capable de les utiliser sur mon ordinateur (avec XAMPP) et de naviguer dans les tables de la base de données en utilisant la ligne de commande du serveur. Cependant, la page Web ne parvient pas à se connecter. J'ai vérifié le mot de passe mais sans résultat. C'est correct (sinon je ne pourrais pas me connecter à mysql à partir de la ligne de commande). 

L'appel de la fonction est le suivant:

$conn = new mysqli("localhost", "root", "password", "shop");

Dois-je définir quelque chose sur mon serveur? Merci

Edit: Version PHP 5.3.3-7 + squeeze1 Version mysql: 5.1.49-3 Tous deux sur debian

50
gc5

J'ai résolu de cette façon: Je me suis connecté avec le nom d'utilisateur root

mysql -u root -p -h localhost

J'ai créé un nouvel utilisateur avec

CREATE USER 'francesco'@'localhost' IDENTIFIED BY 'some_pass';

alors j'ai créé la base de données

CREATE DATABASE shop;

J'ai accordé des privilèges au nouvel utilisateur pour cette base de données

GRANT ALL PRIVILEGES ON shop.* TO 'francesco'@'localhost';

Ensuite, j'ai déconnecté root et connecté un nouvel utilisateur.

quit;
mysql -u francesco -p -h localhost

J'ai reconstruit ma base de données en utilisant un script

source shop.sql;

Et c'est tout .. Maintenant de php fonctionne sans problèmes avec l'appel

 $conn = new mysqli("localhost", "francesco", "some_pass", "shop");

Merci à tous pour votre temps :)

68
gc5

Existe-t-il une entrée de compte utilisateur dans la base de données pour root @ localhost? Dans MySQL, vous pouvez définir différentes autorisations de compte d'utilisateur par hôte. Plusieurs comptes différents portant le même nom peuvent être associés à l'hôte à partir duquel ils se connectent. Les plus courants sont [email protected] et root @ localhost. Ceux-ci peuvent avoir différents mots de passe et autorisations. Assurez-vous que root @ localhost existe et possède les paramètres que vous attendez.

Je suis prêt à parier, sur la base de votre explication, que tel est le problème. La connexion depuis un autre PC utilise un compte différent de root @ localhost et la ligne de commande, à mon avis, se connecte à l’aide de [email protected].

10
queso

D'après ce que vous avez dit jusqu'à présent, cela ressemble à un problème qui empêche le pilote MySQL de PHP 5.3 de se connecter à l'ancienne version 4.1 de MySQL. Jetez un coup d'œil sur http://www.bitshop.com/Blogs/tabid/95/EntryId/67/PHP-mysqlnd-cannot-connect-to-MySQL-4-1-using-old-authentication.aspx

Il y a une question similaire ici avec quelques réponses utiles, Impossible de se connecter à MySQL 4.1+ avec une ancienne authentification

SELECT `User`, `Host`, Length(`Password`) FROM mysql.user

Cela renverra 16 pour les comptes avec des mots de passe anciens et 41 pour les comptes avec des nouveaux mots de passe (et 0 pour les comptes sans mot de passe, vous voudrez peut-être aussi vous en occuper) . Soit utiliser les outils de gestion des utilisateurs du front-end MySQL (s’il en existe), soit

SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges
6
Jack Murdoch

J'ai eu ce problème également. Mais c’est pour une autre raison ... Mon mot de passe a commencé par le caractère $... p. Ex. $MyPassword Je l'ai changé en #MyPassword et le problème est résolu.

3
LowLevel

POINTE:

commentez les fichiers pid et socket, si vous ne pouvez pas vous connecter au serveur .. mysql peut se connecter avec un fichier pid et/ou socket incorrect, alignez-le "regards" au fichier pid/socket incorrect ...

### commentez les fichiers pid et socket, si vous ne pouvez pas vous connecter au serveur ..
# pid-file =/var/run/mysql/mysqld.pid # socket =/var/lib/mysql/mysql.sock
0
Dutch Glory

Editez vos privilèges sur PHPmyAdmin (WAMP), Notez que votre mot de passe et votre nom d'utilisateur n'ont pas été créés. Donc, créez-le ou éditez-le, afin que cela fonctionne avec votre connexion SQL dans votre php . J'espère que cela fonctionne 

0
Adesina Yomi

Peut-être que le mot de passe n’est pas défini et que vous passez le mot de passe en argument. Essayez d'omettre le mot de passe lors de la connexion.

Très probablement, il n'identifie pas votre utilisateur correctement. root @ localhost . Sélectionnez la version de Mysql utilisée par votre MAMP.

/Applications/MAMP/Library/bin/mysqldump -uroot -p db_name > test_db_dump.sql

En fait, j'ai écrit un alias sur mon ordinateur, je n'ai donc pas à me rappeler comment accéder au répertoire bin.

alias mysqldumpMAMP='/Applications/MAMP/Library/bin/mysqldump'

Ce qui me permet d'exécuter ceci:

mysqldumpMAMP -uroot -p db_name > test_db_dump.sql

Vous pouvez enregistrer un alias dans votre profil bash ~/.bash_profile ou ~/.bash_rc

0
camdixon

Facile.

ouvrez le panneau de configuration xampp -> Config -> my.ini edit with notepad. ajoutez maintenant ceci ci-dessous [mysqld]

skip-grant-tables

Sauvegarder. Lancez Apache et mysql.

J'espère t'aider

0
Miku jessi