"连接失败:访问被拒绝用户'root'@'localhost'(使用密码:YES)"来自php函数

gc5*_*gc5 57 php mysql access-denied

我写了一些php网页使用的函数,以便与mysql数据库进行交互.当我在我的服务器上测试它时,我收到此错误:

"Connect failed: Access denied for user 'root'@'localhost' (using password: YES)" 
Run Code Online (Sandbox Code Playgroud)

我可以在我的电脑上使用它们(使用XAMPP),我可以使用服务器中的命令行浏览数据库的表格.但是,网页无法连接.我已经检查了密码但没有结果.这是正确的(否则我无法从命令行登录到mysql).

该函数的调用如下:

$conn = new mysqli("localhost", "root", "password", "shop");
Run Code Online (Sandbox Code Playgroud)

我必须在我的服务器中设置一些东西吗?谢谢

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

gc5*_*gc5 76

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

mysql -u root -p -h localhost
Run Code Online (Sandbox Code Playgroud)

我创建了一个新用户

CREATE USER 'francesco'@'localhost' IDENTIFIED BY 'some_pass';
Run Code Online (Sandbox Code Playgroud)

然后我创建了数据库

CREATE DATABASE shop;
Run Code Online (Sandbox Code Playgroud)

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

GRANT ALL PRIVILEGES ON shop.* TO 'francesco'@'localhost';
Run Code Online (Sandbox Code Playgroud)

然后我注销root并登录新用户

quit;
mysql -u francesco -p -h localhost
Run Code Online (Sandbox Code Playgroud)

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

source shop.sql;
Run Code Online (Sandbox Code Playgroud)

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

 $conn = new mysqli("localhost", "francesco", "some_pass", "shop");
Run Code Online (Sandbox Code Playgroud)

感谢您的所有时间:)


小智 10

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

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


Jac*_*och 7

从你到目前为止所说的,这听起来像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

这里有一个类似的问题,有一些有用的答案,无法使用旧的身份验证连接到MySQL 4.1+

SELECT `User`, `Host`, Length(`Password`) FROM mysql.user
Run Code Online (Sandbox Code Playgroud)

对于具有旧密码的帐户,这将返回16;对于具有新密码的帐户,将返回41(对于没有密码的帐户,这将返回0,您可能也想要照顾这些密码).使用MySQL前端的用户管理工具(如果有的话)或

SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges
Run Code Online (Sandbox Code Playgroud)


小智 6

简单的。

打开xampp控制面板 -> Config -> my.ini 用记事本编辑。现在在下面添加这个[mysqld]

skip-grant-tables
Run Code Online (Sandbox Code Playgroud)

节省。启动apache和mysql。

我希望对你有帮助


小智 5

也许在这里?

我认为代码应该是:


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

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


Low*_*vel 5

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