"Échec de la connexion: Accès refusé pour l'utilisateur 'root' @ 'localhost' (en utilisant le mot de passe: oui) " de 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 pc (en utilisant XAMPP) et je peux naviguer à travers les tables de la base de données en utilisant la ligne de commande dans le serveur. Cependant, la page web ne se connecte pas. J'ai vérifié le mot de passe mais sans résultats. C'est correct (sinon je ne pourrais pas me connecter à mysql depuis la ligne de commande).

L'appel de la fonction est le suivant:

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

dois-je configurer quelque chose dans mon serveur? Merci

Edit: PHP Version 5.3.3-7+squeze1 version mysql: 5.1.49-3 tous les deux sur debian

46
demandé sur solomonbstoner 2011-06-22 22:49:33

10 réponses

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';

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

CREATE DATABASE shop;

j'ai le privilège accordé pour un nouvel utilisateur pour cette base de données

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

puis je me suis déconnecté de root et me suis connecté au 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 à partir de php fonctionne sans problèmes avec l'appel

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

Merci à tous pour votre temps :)

64
répondu gc5 2011-06-23 12:30:02

y a-t-il une entrée de compte utilisateur dans le DB pour root@localhost? Dans MySQL vous pouvez définir différentes permissions de compte utilisateur par hôte. Il pourrait y avoir plusieurs comptes différents avec le même nom combiné avec l'hôte de connexion. Les plus courants sont: root@127.0.0.1 et root@localhost. Ceux-ci peuvent avoir différents mots de passe et des autorisations. Assurez-vous que root@localhost existe et a les paramètres que vous attendez.

je suis prêt à parier, basé sur votre explication, que ce soit le problème. Se connecter à partir d'un autre PC utilise un compte différent de root@localhost et la ligne de commande je pense se connecte en utilisant root@127.0.0.1.

10
répondu queso 2011-06-22 19:09:46

D'après ce que vous avez dit jusqu'à présent, ça ressemble à un problème où le pilote MySQL dans PHP5.3 a de la difficulté à se connecter à L'ancienne version de MySQL 4.1. Jetez un oeil 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, ne peut pas se connecter à MySQL 4.1 + en utilisant l'ancienne authentification

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

cela retournera 16 pour les comptes avec d'anciens mots de passe et 41 pour les comptes avec de nouveaux mots de passe (et 0 pour les comptes sans mot de passe du tout, vous pourriez vouloir prendre soin de ceux-ci aussi). Utilisez les outils de gestion des utilisateurs de MySQL front end (s'il y en a) ou

SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges
6
répondu Jack Murdoch 2017-05-23 12:18:19

peut-être?

je crois que le code devrait être:



$connect = new mysqli("host", "root", "", "dbname");

parce que root n'a pas de mot de passe. le (using password: YES) dit" vous utilisez un mot de passe avec cet utilisateur "

3
répondu Pseudo Nym 2014-04-04 17:15:30

j'ai eu ce problème aussi. Mais c'était pour une autre raison. Mon mot de passe a commencé avec le caractère $ ... par exemple $MyPassword Je l'ai changé en #MyPassword et le problème est résolu.

3
répondu LowLevel 2015-05-07 10:32:09

modifiez vos privilèges sur PHPmyAdmin (WAMP), notez que votre mot de passe et nom d'utilisateur n'a pas été créé. Alors créez ou modifiez-le, pour qu'il puisse fonctionner avec votre connexion sql dans votre php. Espérons que cela fonctionne

0
répondu Adesina Yomi 2013-03-21 11:51:07

ASTUCE:



commentez le fichier pid et socket, si vous ne pouvez pas vous connecter au serveur.. mysql pourrait se connecter avec un fichier pid et/ou socket incorrect, ainsi, lorsque vous essayez de vous connecter au serveur en ligne de commande il "looks au mauvais fichier pid/socket...

### comment out pid and socket file, if you can't connect to server..

#pid-file=/var/run/mysql/mysqld.pid #socket=/var/lib/mysql/mysql.sock
0
répondu Dutch Glory 2017-05-27 07:40:40

très probablement, il n'identifie pas votre Utilisateur correctement. root@localhost. Sélectionnez la version Mysql que votre MAMP utilise.

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

j'ai en fait écrit un alias sur mon ordinateur donc je n'ai pas à me rappeler comment aller dans le répertoire bin.

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

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
répondu camdixon 2017-07-04 17:34:10

facile.

ouvrir le panneau de configuration xampp - > Config - > my.ini modifier avec le bloc-notes. Maintenant, ajoutez ceci ci-dessous [mysqld]

skip-grant-tables

Save. Lancez apache et mysql.

, je l'espère, vous aider à

0
répondu Miku jessi 2018-09-27 18:01:08

essayez d'initialiser vos variables et utilisez-les dans votre objet de connexion:

$username ="root";
$password = "password";
$host = "localhost";
$table = "shop";
$conn = new mysqli("$host", "$username", "$password", "$table");
-1
répondu Greg 2011-06-22 19:09:01