使用XAMPP连接PHP数据库报错SQLSTATE[HY000][1045],求解决方法
解决PHP连接MySQL出现SQLSTATE[HY000] [1045]权限错误的方案
问题描述
连接数据库时抛出错误:
Connection failed: SQLSTATE[HY000] [1045] Access denied for user 'test'@'localhost' (using password: YES)
使用的PHP连接代码:
<?php $sname = 'localhost'; //server name properties name any $user = 'root'; //server username $pass = ''; //server password $db = 'database_new'; //database name $db = new mysqli ('localhost', $user, $pass, $db) or die ("unable to connect"); echo "Successfully Connected"; ?>
已检查XAMPP本地用户账户,未发现异常,但问题仍存在。
排查与解决步骤
核对代码与错误提示的用户一致性
错误提示中被拒绝的是test用户,但代码里使用的是root用户,需确认:- 当前运行的PHP文件是否为你修改后的版本,避免打开了错误的文件
- 清理浏览器缓存或重启XAMPP的Apache服务,排除旧代码缓存问题
验证root用户的登录权限
打开XAMPP的phpMyAdmin,用root用户(空密码)登录,执行以下SQL语句检查权限:SELECT user, host, authentication_string FROM mysql.user WHERE user = 'root';- 确保
host列包含localhost或%(允许所有地址访问) - 如果root用户的密码被修改过,同步修正代码中的
$pass值
- 确保
确认目标数据库存在
在phpMyAdmin中检查是否存在名为database_new的数据库,避免代码中数据库名称拼写错误重置root用户权限(若上述步骤无效)
- 停止XAMPP的MySQL服务,打开命令行进入XAMPP的MySQL目录(通常为
xampp/mysql/bin),执行:mysqld.exe --skip-grant-tables - 打开新的命令行窗口,进入同一目录,执行:
mysql.exe -u root - 执行SQL重置root用户权限(空密码):
USE mysql; UPDATE user SET authentication_string='' WHERE user='root' AND host='localhost'; FLUSH PRIVILEGES; EXIT; - 关闭所有命令行窗口,重启XAMPP的MySQL服务后重新测试连接
- 停止XAMPP的MySQL服务,打开命令行进入XAMPP的MySQL目录(通常为
检查端口拦截情况
暂时关闭本地防火墙或安全软件,确认是否存在MySQL 3306端口被拦截的情况
内容的提问来源于stack exchange,提问作者krizalic
相关产品推荐
相关产品推荐

