XAMPP环境网站前端向MySQL插入数据失败 报1045访问拒绝错误
故障原因
触发Access denied for user 'root'@'localhost' (using password: NO)报错,和你贴的phpMyAdmin展示的无密码配置不符,常见原因有三个:
- phpMyAdmin展示的用户配置是缓存的旧信息,实际MySQL服务中root@localhost账号已设置密码,代码传入空密码被拒绝
- 连接主机填
localhost时,PHP的mysqli扩展默认走本地socket/命名管道连接,XAMPP环境下如果MySQL服务未开启本地socket监听、仅开放TCP端口,会误报密码类1045错误 - MySQL库中存在空用户名的匿名账号,本地连接时优先级高于root账号,导致权限校验不通过
解决步骤
按顺序排查即可:
- 验证root账号真实登录状态
打开XAMPP控制面板,点击MySQL行对应的「Shell」按钮调出命令行,直接输入mysql -u root回车:- 若能正常进入MySQL命令行提示符,说明root无密码配置生效,问题出在连接通道
- 若提示密码错误无法进入,说明root实际设置过密码,将连接代码中第三个参数的空字符串替换为真实密码即可
- 修正连接写法
无密码能登进命令行的情况下,把连接主机从localhost改为127.0.0.1强制走TCP连接,同时建议连接时直接指定数据库名,省略单独选库的步骤,参考代码:
$conn = mysqli_connect("127.0.0.1", "root", "", "wayout") or die(mysqli_connect_error()); $res = mysqli_query($conn, $sql) or die(mysqli_error($conn));
- 清理异常匿名用户
以上操作无效时,在MySQL命令行中执行以下语句删除匿名用户、刷新权限,执行完成后重启MySQL服务再测试:
DELETE FROM mysql.user WHERE User=''; FLUSH PRIVILEGES;
调试阶段不要写
or die("error")这种模糊的错误提示,直接输出mysqli扩展提供的具体错误信息,能大幅减少排查时间。
内容的提问来源于stack exchange,提问作者themadhatter
相关产品推荐
相关产品推荐

