62

我写了一些由 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

4

11 回答 11

92

我是这样解决的:我用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");

感谢大家的时间:)

于 2011-06-23T12:30:02.953 回答
10

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

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

于 2011-06-22T19:09:46.937 回答
8

从您目前所说的来看,这听起来像是 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(对于根本没有密码的帐户,您可能也需要处理这些)。要么使用 MySQL 前端的用户管理工具(如果有的话)要么

SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges
于 2011-06-22T20:18:05.353 回答
6

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

于 2015-05-07T10:32:09.017 回答
5

也许在这里?

我相信代码应该是:


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

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

于 2014-04-04T17:15:30.460 回答
5

简单的。

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

skip-grant-tables

节省。启动apache和mysql。

希望对你有帮助

于 2018-09-27T18:01:08.453 回答
1

提示:

如果您无法连接到服务器,请注释掉 pid 和套接字文件。mysql 可能正在连接不正确的 pid 和/或套接字文件,因此当您尝试通过命令行连接到服务器时,它会 “查看”不正确的 pid/socket 文件...

### 注释掉 pid 和 socket 文件,如果无法连接到服务器.. 
#pid-file=/var/run/mysql/mysqld.pid #socket=/var/lib/mysql/mysql.sock
于 2017-05-27T07:40:40.477 回答
1

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

于 2017-07-04T17:34:10.870 回答
1

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

于 2019-05-04T03:13:43.783 回答
0

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

$username ="root";
$password = "password";
$host = "localhost";
$table = "shop";
$conn = new mysqli("$host", "$username", "$password", "$table");
于 2011-06-22T19:09:01.697 回答
0

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

于 2013-03-21T11:51:07.100 回答