最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Win10搭建ThinkPHP 8.0:解决PDO连接MySQL报Access denied异常 解答
时间:2026-06-20 09:58:58 编辑:袖梨 来源:一聚教程网
ThinkPHP 8报1045错误核心是user@host不匹配或权限缺失:需确认MySQL服务真实运行、强制PHP用127.0.0.1连接、创建对应host用户并授权、切换认证插件为mysql_native_password、确保pdo_mysql扩展启用且重启Web服务。
在Windows 10系统中搭建ThinkPHP 8.0项目时,执行数据库操作直接报错「SQLSTATE[HY000][1045] Access denied for 'root'@'localhost'」,不是密码输错了重试就行,而是MySQL拒绝了整个认证流程——关键卡点就两个:user@host组合不匹配,或该组合没被授予对应权限。
确认MySQL服务真实运行且端口就绪
phpEnv或手动安装的MySQL显示“已启动”,不代表mysqld进程真在跑。打开任务管理器→服务页签→找到MySQL80→右键“转到进程”,若mysqld.exe瞬间消失,说明服务崩溃退出。
去MySQL安装目录下的data子目录,找以计算机名.err命名的日志文件(如DESKTOP-ABC.err),开头几行通常有明确报错,比如Address already in use(3306端口被占)或Can't find file './mysql/user.MYD'(数据目录损坏)。
命令行强制启动验证:cd F:phpEnvmysqlbin → mysqld --defaults-file=..my.ini --console,观察控制台是否卡在初始化或直接报错退出。
立即学习“PHP免费学习笔记(深入)”;
用netstat -ano | findstr :3306查端口占用,若PID非mysqld.exe,需先杀掉冲突进程。
修正PHP连接参数与MySQL user@host严格匹配
ThinkPHP 8默认配置database.php中写'hostname' => 'localhost',但Windows下mysqli会优先走命名管道而非TCP,导致权限判断逻辑不同;而MySQL 8.0默认只允许'root'@'localhost',却把'root'@'127.0.0.1'视为完全独立账户。
方法一:强制PHP走TCP协议
将database.php中的'hostname' => 'localhost'改为【'hostname' => '127.0.0.1'】,并确认'hostport' => '3306'未被注释或修改。
方法二:在MySQL中显式创建对应host用户
用phpMyAdmin或命令行登录MySQL(空密码可直接回车):
① 执行SELECT User, Host FROM mysql.user WHERE User = 'root';,确认是否存在127.0.0.1这一行;
② 若无,执行:CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '';
③ 紧接着执行:GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;
④ 【必须执行 FLUSH PRIVILEGES;】,否则权限不生效。
切换MySQL认证插件为兼容模式
MySQL 8.0+默认使用caching_sha2_password插件,而旧版PHP(尤其phpEnv内置PHP)未启用mysqlnd或版本太低时,会静默失败并报看似“密码错误”的Access denied。
登录MySQL后执行:SELECT User, Host, plugin FROM mysql.user WHERE User = 'root';,若plugin列为caching_sha2_password,则需切换:
执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
若需同时兼容127.0.0.1连接,再补一句:ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '';
这一步做完,无需重启MySQL服务,新认证方式立即生效。
检查PHP扩展是否真正启用
ThinkPHP 8依赖PDO_MySQL驱动,但仅在php.ini中取消;extension=pdo_mysql前的分号还不够——需确认实际加载成功。
新建一个phpinfo.php文件,内容为<?php phpinfo(); ?>,用浏览器访问,搜索pdo_mysql,确认状态栏显示“enabled”且有对应版本信息。
若未出现,检查php.ini路径是否正确(phpinfo页面顶部明确写出Loaded Configuration File),并在该文件中确保以下三行均开启:
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_mysqli.dll
改完后必须重启Web服务器(Apache/Nginx)或phpEnv的PHP服务,否则扩展不会加载。
相关文章
- 2026年Notion AI设计场景用法:草稿生成与风格约束说明 06-20
- 京东在哪里可以解绑银行卡 06-20
- 2026年Notion AI响应缓慢:网络、缓存与账户配置排查 06-20
- 2026年Notion AI团队协作:权限、工作流与配置要点 06-20
- Notion AI企业版新手入门:账号权限与工作空间配置说明 06-20
- 如何用python创建项目 06-20