ThinkPHP 命令行执行 migrate 报错 PDOException 驱动未找到怎么办?

文章导读
90% 的此类报错源于 PHP 未启用 PDO 驱动(如 pdo_mysql),而非框架配置错误(来源:ThinkPHP 驱动排查指南)。
📋 目录
  1. 原因分析
  2. 解决方案
  3. 注意事项
  4. 参考来源
A A

90% 的此类报错源于 PHP 未启用 PDO 驱动(如 pdo_mysql),而非框架配置错误(来源:ThinkPHP 驱动排查指南)。

原因分析

当执行php think migrate出现PDOException: could not find driver时,本质是 PHP 环境缺少数据库驱动扩展。根据技术原理,PDO 需要两个条件:
1. 基础pdo扩展已启用(提供统一接口)
2. 具体驱动如pdo_mysql已加载(实现协议通信)
若任一缺失,调用new PDO('mysql:')即触发报错(来源:PHP PDO 驱动完整指南)。

解决方案

1. 验证 PHP 驱动状态

运行php -m | grep pdo,确认输出包含pdopdo_mysql(MySQL 场景)。若缺失,需安装对应扩展:
- Ubuntu/Debian:sudo apt install php-pdo php-mysql
- CentOS/RHEL:sudo yum install php-pdo php-mysqlnd(注意非php-mysql
- Windows:检查php.iniextension=php_pdo.dllextension=php_pdo_mysql.dll前分号是否取消(来源:ThinkPHP 驱动安装指南)。

2. 统一 CLI 与 Web 环境配置

命令行与 Web 服务可能加载不同php.ini。分别执行:
- CLI:php --ini查看配置路径
- Web:创建phpinfo()页面检查Loaded Configuration File
对比两者extension配置,确保驱动在双方均启用。修改后重启服务(如sudo systemctl restart apache2)并刷新phpinfo()验证(来源:CLI 与 Web 环境差异排查)。

3. ThinkPHP 6+ 配置特殊要求

TP6 使用think-orm,需确保config/database.phpconnections.default.type为字符串(如'mysql'),而非数组。错误示例:['type' => 'mysql']会触发驱动查找失败(截至 2026 年 3 月 29 日版本要求)。

ThinkPHP 命令行执行 migrate 报错 PDOException 驱动未找到怎么办?

注意事项

- Docker 环境需在Dockerfile中添加docker-php-ext-install pdo pdo_mysql,否则镜像内无驱动(来源:Docker 扩展安装指南)。
- Windows 用户注意extension_dir路径是否正确,错误路径会导致cannot open shared object file(如/usr/lib/php5/20090626+lfs/pdo_mysql.so不存在)(来源:Linux 扩展加载失败案例)。
- 修改php.ini后必须重启 Web 服务,仅重启 PHP-FPM 可能不生效(来源:Apache/Nginx 重启验证建议)。

参考来源

来源:ThinkPHP 官方文档 - 数据库驱动配置规范

来源:PHP 社区论坛 - PDO 扩展加载问题讨论(2023 年 1 月 12 日)

来源:GitHub Issue #TP6-ORM-配置兼容性(截至 2026 年 3 月 29 日)