“连接失败:拒绝访问用户'root'@'localhost'(使用密码:YES)”从PHP函数

我写了一些php网页使用的函数,以便与mysql数据库进行交互。 当我在我的服务器上testing他们时,我得到这个错误:

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

我可以在我的电脑上使用它们(使用XAMPP),并且可以使用服务器中的命令行浏览数据库的表格。 相反,网页无法连接。 我检查了密码,但没有结果,这是正确的(否则我不能从命令行login到MySQL)。

该函数的调用如下:

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

我有什么东西在我的服务器? 谢谢

编辑:PHP版本5.3.3-7 + squeeze1 mysql版本:5.1.49-3都在debian上

我用这种方式解决了:我用root用户名login

 mysql -u root -p -h localhost 

我创build了一个新的用户

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

然后我创build了数据库

 CREATE DATABASE shop; 

我授予此数据库的新用户权限

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

然后我注销了root并login了新用户

 quit; mysql -u francesco -p -h localhost 

我使用脚本重build了我的数据库

 source shop.sql; 

就是这样..现在从PHP的工作没有问题的电话

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

感谢所有的时间:)

在root @ localhost的数据库中是否有用户帐户条目? 在MySQL中,您可以通过主机设置不同的用户帐户权限。 可能有几个不同的账户与他们连接的主机相同的名称。 最常见的是root@127.0.0.1和root @ localhost。 这些可以有不同的密码和权限。 确保root @ localhost存在并具有您所期望的设置。

我敢打赌,根据你的解释,这是问题所在。 从另一台PC连接使用与root @ localhost不同的帐户,我认为使用root@127.0.0.1连接的命令行。

从目前为止你所说的话来看,这听起来像是一个PHP5.3中的MySQL驱动程序无法连接到较老的MySQL版本4.1的问题。 看看http://www.bitshop.com/Blogs/tabid/95/EntryId/67/PHP-mysqlnd-cannot-connect-to-MySQL-4-1-using-old-authentication.aspx

这里有一个类似的问题,有一些有用的答案, 不能使用旧的身份validation连接到MySQL 4.1+

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

对于使用旧密码的账户,这将返回16,对于使用新密码的账户,这将返回41(对于根本没有密码的账户,则返回0,您也可以考虑这些)。 或者使用MySQL前端的用户pipe理工具(如果有的话)或者

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

我也有这个问题。 但这是因为另一个原因。 我的密码以字符$ …开头,例如$MyPassword我已将其更改为#MyPassword ,问题已解决。

这里也许?

我相信这个代码应该是:

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

因为root没有密码。 (using password: YES)说“你正在使用这个用户的密码”

尝试初始化您的variables,并在连接对象中使用它们:

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

PHPmyAdmin (WAMP)上编辑您的权限,请注意,您的密码和用户名尚未创build。 所以创build或编辑它,它可能与你的SQL连接在你的PHP工作。 希望它的作品

小费:

注释掉pid和套接字文件,如果你不能连接到服务器.. mysql可能与不正确的pid和/或套接字文件连接,所以当你尝试通过命令行连接到服务器时,它“看起来”不正确的pid /套接字文件…

  ###注释掉pid和套接字文件,如果无法连接到服务器.. 
#PID文件=在/ var /运行/ MySQL的/ mysqld.pid #sockets=的/ var / lib中/ MySQL的/的mysql.sock

最有可能的是它不能正确识别你的用户。 根@本地。 select您的MAMP正在使用的Mysql版本。

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

我实际上在我的计算机上写了一个别名,所以我不必记得如何到达bin目录。

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

这允许我运行这个:

mysqldumpMAMP -uroot -p db_name > test_db_dump.sql

你可以在你的bashconfiguration文件~/.bash_profile~/.bash_rc保存一个别名

这不是一个错误,这是你的错,你在连接文件中写错码。 你简单的写为

 $con = mysql_connect($host,$user,$password); 

如果你写的worng代码例如

 $con = mysql_connect($host,$password,$user); 

那么它显示

 Access denied for user ''@'localhost' (using password: YES) 

所以保持享受….