应为xampp默认root密码为空但phpmyadmin强制校验密码,需先以--skip-grant-tables模式重置mysql root密码,再在config.inc.php中配置对应账号密码并确保mysqli扩展启用。

phpMyAdmin 登录时提示“#1045 – Access denied for user 'root'@'localhost'”
这是 XAMPP 默认配置导致的:初始状态下,root 用户密码为空,但 phpMyAdmin 的登录界面强制要求输入密码(新版界面会拒绝空密码提交)。实际 MySQL 服务本身仍接受空密码连接,只是前端校验拦住了你。
解决思路不是绕过 phpMyAdmin,而是给 root 用户设一个真实密码,并同步更新 phpMyAdmin 的认证配置。操作分两步:先改 MySQL 密码,再配 config.inc.php。
- 别直接在 phpMyAdmin 界面里用“用户账户”功能改
root密码——它可能只改了部分权限表,且不触发 XAMPP 内置认证逻辑 - 必须用命令行或 MySQL 命令行客户端执行
ALTER USER,确保密码写入mysql.user表并刷新权限 - XAMPP 附带的 MySQL 客户端路径通常是
C:\xampp\mysql\bin\mysql.exe(Windows)或/opt/lampp/bin/mysql(Linux/macOS)
用 mysql -u root -p 命令修改 root 密码失败
常见报错是 Access denied for user 'root'@'localhost',说明当前连不上 MySQL——因为 XAMPP 默认关闭了 root 的密码验证,但命令行又默认尝试用密码登录,形成死锁。
正确做法是跳过权限表启动 MySQL,手动重置密码:
- 停止 XAMPP 中的 MySQL 服务
- 以安全模式启动:
mysqld --skip-grant-tables --skip-external-locking(Windows 下建议用管理员 CMD 运行该命令,路径需进入C:\xampp\mysql\bin\) - 新开一个命令行窗口,执行
mysql -u root(不加-p),此时可直连 - 运行:
FLUSH PRIVILEGES;<br>ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password';
- 退出,关掉安全模式进程,再正常启 MySQL 服务
设置完密码后 phpMyAdmin 仍报错“Cannot log in to the MySQL server”
这是因为 phpMyAdmin 默认使用 cookie 认证方式,而新密码未被它的配置文件识别。它需要明确知道该用什么凭据去连 MySQL。
编辑 C:\xampp\phpMyAdmin\config.inc.php(Linux/macOS 是 /opt/lampp/phpmyadmin/config.inc.php),找到 $cfg['Servers'][$i]['auth_type'] 行:
- 如果值是
'cookie'(默认),保留它,但必须确保下面两行存在且取消注释:$cfg['Servers'][$i]['user'] = 'root';<br>$cfg['Servers'][$i]['password'] = 'your_new_password';
- 如果值是
'config',那它会直接用这组账号密码自动登录,适合本地开发环境;但注意:密码明文写在文件里,别用在公网服务器 - 改完保存,重启 Apache(phpMyAdmin 依赖 Apache),不要只刷新页面
为什么改了 config.inc.php 还要检查 httpd.conf 或 php.ini?
极少情况下,问题不出在认证逻辑,而出在 PHP 扩展或 Apache 模块加载异常。比如 mysqli 或 pdo_mysql 扩展没启用,phpMyAdmin 根本发不出数据库请求,错误表现和登录失败一模一样。
快速排查点:
- 访问
http://localhost/xampp/phpinfo.php,搜索mysqli,确认状态为 enabled - 打开
C:\xampp\php\php.ini,确认这两行没被注释:;extension=mysqli<br>;extension=pdo_mysql
(去掉前面的分号) - Apache 错误日志(
C:\xampp\apache\logs\error.log)里如果有PHP Warning: mysqli_connect(): (HY000/1045)类报错,说明是认证问题;如果是Call to undefined function mysqli_connect(),那就是扩展没开
密码设对了、配置写准了、扩展也开了,还登不进去,大概率是 config.inc.php 文件编码被改成 UTF-8 BOM,Apache 解析失败——用 Notepad++ 改成 ANSI 或 UTF-8 无 BOM 再试。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











