“连接失败:用户'root'@'localhost'的访问被拒绝(使用密码:YES)”来自php函数[重复]

Posted

技术标签:

【中文标题】“连接失败:用户\'root\'@\'localhost\'的访问被拒绝(使用密码:YES)”来自php函数[重复]【英文标题】:"Connect failed: Access denied for user 'root'@'localhost' (using password: YES)" from php function [duplicate]“连接失败:用户'root'@'localhost'的访问被拒绝(使用密码:YES)”来自php函数[重复] 【发布时间】:2011-09-20 17:09:45 【问题描述】:

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

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

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

函数的调用如下:

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

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

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

【问题讨论】:

你运行的是什么版本的 PHP?什么版本的MySQL?听起来类似于bitshop.com/Blogs/tabid/95/EntryId/67/… 【参考方案1】:

我是这样解决的: 我用root用户名登录

mysql -u root -p -h localhost

我创建了一个新用户

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

然后我创建了数据库

CREATE DATABASE shop;

我为这个数据库的新用户授予权限

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

然后我退出root并登录新用户

quit;
mysql -u francesco -p -h localhost

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

source shop.sql;

就是这样..现在从 php 调用没有问题

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

感谢大家的宝贵时间:)

【讨论】:

好吧,我尝试了一切,但它仍然显示问题,发现,我有其他用户在数据库中具有不同主机值的相同名称,具有不同的密码和权限,删除了这些用户并且它工作, 你在哪里输入这些命令?我真的很陌生,这实际上是前几天才开始的。我正在使用 MAMP 并尝试连接我在 phpmyadmin 中设置的数据库。 @pete800 我记不清了,但你必须使用终端,而不是 phpmyadmin。但是,我不知道后者是否支持终端。您必须直接从终端访问 mysql。 不明白在哪里输入这些命令以及具体是什么以及为什么?请解释更多。 @Mr_Andrew 您必须通过操作系统的终端(命令行)键入此命令。在 Mac OS 中,它可能是 Terminal、iTerm、在 Windows Powershell 中、在 Linux gnome-terminal 中等等。进入终端后,通过第一个命令登录 mysql 客户端,然后继续执行后续命令。【参考方案2】:

数据库中是否有 root@localhost 的用户帐户条目?在 MySQL 中,您可以按主机设置不同的用户帐户权限。可能有多个具有相同名称的不同帐户以及它们连接的主机。最常见的是 root@127.0.0.1 和 root@localhost。它们可以有不同的密码和权限。确保 root@localhost 存在并且具有您期望的设置。

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

【讨论】:

当我从命令行登录时,我使用 mysql -u root -p -h localhost 并输入 select user() 我得到 root@localhost 和........我做了GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; FLUSH PRIVILEGES;所以应该没有问题......但是mysql一直说访问被拒绝......这显然使mysql毫无用处。跨度> ahhhh 又被 mysql 骗了……更改密码命令出错了我不得不做SET PASSWORD FOR 'root'@'%' = PASSWORD('MyNewPass'); mysql 欺骗了我,让它看起来只有一个密码,而实际上 mysql 认为是 root @domain1 与 root@domain2 完全不同的用户....【参考方案3】:

从您目前所说的来看,这听起来像是 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

这里有一个类似的问题,有一些有用的答案,Cannot connect to MySQL 4.1+ using old authentication

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

这将返回 16 用于具有旧密码的帐户和 41 用于具有新密码的帐户(而 0 用于根本没有密码的帐户,您可能也需要注意这些)。 要么使用 MySQL 前端的用户管理工具(如果有的话)要么

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

【讨论】:

这似乎是正确的解决方案,但它不起作用:|正如我在 php 和 mysql 之前编辑的版本应该兼容..我会进一步谷歌..另外,我设置为用户密码(不同的主机)相同的密码但没有结果.. @Francesco echo mysqli_connect_error(); 的输出是什么? 输出是我用作标题的那个Connect failed: Access denied for user 'root'@'localhost' (using password: YES) 此外:SELECT `User`, `Host`, `Password` FROM mysql.user 我知道所有三个 root 帐户都有相同的密码哈希..【参考方案4】:

我也有这个问题。但这是因为另一个原因。 我的密码以字符 $... 开头。 $MyPassword 我已经改成#MyPassword,问题就解决了。

【讨论】:

解决了我们在 Cpanel 上安装 OpenCart 的问题。我们正在寻找服务器上 mysqli 的问题,结果发现是密码中的无效字符!谢谢。 @JaydenMeyer 不客气;我很高兴能帮上忙! 感谢您的回答。我从没想过以后会再犯同样的错误。花了这么多时间。【参考方案5】:

也许在这里?

我认为代码应该是:

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

因为root没有密码。 (using password: YES) 表示“您正在使用此用户的密码”

【讨论】:

【参考方案6】:

简单。

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

skip-grant-tables

保存。启动apache和mysql。

希望对你有帮助

【讨论】:

【参考方案7】:

提示: 注释掉 pid 和 socket 文件,如果您无法连接到服务器.. mysql 可能正在连接不正确的 pid 和/或套接字文件, 因此,当您尝试通过命令行连接到服务器时,它 "looks" 在不正确的 pid/socket 文件中...

### 注释掉 pid 和 socket 文件,如果你无法连接到服务器..#pid-file=/var/run/mysql/mysqld.pid
#socket=/var/lib/mysql/mysql.sock

【讨论】:

【参考方案8】:

很可能它没有正确识别您的用户。根@localhost。 选择您的 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

您可以在 bash 配置文件中保存别名 ~/.bash_profile~/.bash_rc

【讨论】:

【参考方案9】:

可能没有设置密码并且您将密码作为参数传递。 尝试在连接过程中省略密码参数..

【讨论】:

嗨@shrinivas-manjithaya,感谢您的回答。包含您向用户建议的代码示例肯定会有所帮助。此外,如果您能够重现他们遇到的错误并为用户提供如何解决此问题的说明,那么您的回答更有可能对他们有所帮助。【参考方案10】:

尝试初始化变量并在连接对象中使用它们:

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

【讨论】:

虽然这会使代码更具可读性,但它并不能解决与不正确的身份验证信息和/或授权有关的问题。 $conn = new mysqli($host, $username, $password, $table); 不需要双引号。【参考方案11】:

PHPmyAdmin (WAMP) 上编辑您的权限,请注意您的密码和用户名尚未创建。所以一定要创建或编辑它,它可能适用于你的 php.ini 中的 sql 连接。 希望有效

【讨论】:

以上是关于“连接失败:用户'root'@'localhost'的访问被拒绝(使用密码:YES)”来自php函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章