MySQL 1045错误:root@localhost连接被拒及mysqli_query报错求助
解决mysqli连接错误:Access denied for user 'root'@'localhost' 及后续fetch失败
首先,我们先拆解你遇到的两个错误:
警告:mysqli::__construct(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES):这是MySQL的认证失败错误,说明你的PHP代码尝试用root用户+密码连接本地MySQL,但MySQL拒绝了这个请求。警告:mysqli_query(): Couldn't fetch mysqli:这是第一个错误的连锁反应——因为数据库连接没建立成功,后续调用mysqli_query时没有有效的连接对象,所以报错。
不过我注意到你提供的cfg.php代码里完全没有任何MySQL连接的逻辑,你贴的代码第2行是$CFG = new object();,但错误提示的第2行是mysqli::__construct()操作,这说明要么你贴错了文件内容,要么实际运行的cfg.php在你贴的这段代码之外还有数据库连接的代码。
接下来给你一步步的解决步骤:
1. 找到真正的数据库连接代码
先打开/var/www/html/frontend/htdocs/cfg.php文件,定位第2行到第4行的实际内容——你现在提供的代码和错误提示不匹配,必须找到包含mysqli::__construct()的那部分代码,这是解决问题的核心。
2. 修复MySQL认证失败问题
当你找到连接代码后(通常类似下面这样):
$conn = new mysqli('localhost', 'root', 'your_password', 'your_database');
你可以从这几个方向排查:
- 验证密码正确性:先在终端用命令登录MySQL确认密码是否正确:
输入你代码里的密码,如果能成功登录,说明密码没问题;如果登录失败,那就是密码错误,需要修正代码里的密码,或者重置root用户密码。mysql -u root -p - 检查root用户的权限配置:有些MySQL环境中,
root用户的访问权限可能被限制。登录MySQL后执行以下SQL,查看root用户的允许访问主机:
如果没有SELECT user, host FROM mysql.user WHERE user = 'root';root@localhost的条目,需要创建并授权:CREATE USER 'root'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; - 确认MySQL服务状态:确保你的MySQL/MariaDB服务正在运行。在Linux系统可以用以下命令检查:
如果服务没启动,执行systemctl status mysqlsystemctl start mysql启动服务。 - 检查端口是否正确:如果你的MySQL不是用默认的3306端口,需要在连接时指定端口参数:
$conn = new mysqli('localhost', 'root', 'your_password', 'your_database', 3307);
3. 处理后续的mysqli_query错误
这个错误是连接失败导致的,只要解决了第一个认证问题,第二个错误自然会消失。另外,建议在连接代码里加上错误处理逻辑,方便后续排查:
$conn = new mysqli('localhost', 'root', 'your_password', 'your_database'); // 检查连接是否成功 if ($conn->connect_error) { die("数据库连接失败: " . $conn->connect_error); }
内容的提问来源于stack exchange,提问作者nonamewawrsaw
相关产品推荐
相关产品推荐

