答案是php未安装或未启用pdo_mysql扩展:需先用php -m | grep pdo确认cli环境已加载pdo和pdo_mysql,再通过phpinfo()核对web环境的loaded configuration file路径及extension=pdo_mysql是否启用,二者必须一致且驱动名严格为'mysql'。

php -m 里看不到 pdo_mysql 就别配 ThinkPHP
报 could not find driver,90% 的情况是 PHP 根本没装或没启 pdo_mysql 扩展,不是 ThinkPHP 配错了。先停手改 database.php,直接查环境:
- 命令行运行
php -m | grep pdo,必须同时看到pdo和pdo_mysql(不是mysqli) - Web 环境下访问
phpinfo()页面,搜索PDO drivers,确认列表里有mysql(注意:是小写、无下划线、无前缀) - Linux 下常见漏装:
sudo apt install php-pdo php-mysql(Ubuntu/Debian)或sudo yum install php-pdo php-mysqlnd(CentOS/RHEL) - Windows 用户检查
php.ini中是否去掉了;extension=php_pdo.dll和;extension=php_pdo_mysql.dll前的分号;还要确认extension_dir指向的目录下真实存在这两个 DLL 文件
ThinkPHP 的 'type' => 'mysql' 不是随便写的字符串
这个字段不是“填个数据库名”,而是 PDO 扩展注册的驱动标识符,大小写、拼写、下划线全敏感。写错一个字符,Driver not found 直接抛出:
- 合法值只有:
'mysql'、'pgsql'、'sqlite'、'sqlsrv'、'oci' - 禁止写成:
'MySQL'、'pdo_mysql'、'mysqli'、'mysql '(末尾空格)、"mysql"(双引号在某些旧版 TP 中有解析差异) - TP6+ 的
config/database.php中,connections.default.type必须是字符串,不能是数组(比如不能写成['type' => 'mysql']) - 如果用 PostgreSQL,
type写成'pgsql'后,还必须确保系统已安装并启用了pdo_pgsql,否则照样报错
CLI 和 Web 环境用的不是同一个 php.ini
你在终端跑 php think migrate 成功,但浏览器一打开就崩?大概率 CLI 和 Apache/Nginx/FPM 加载了两套完全不同的 PHP 配置。
- CLI 下执行
php --ini查配置路径;Web 下看phpinfo()页顶部 “Loaded Configuration File” - 对比两个
php.ini,重点检查extension=行是否都启用,尤其 Windows 下extension_dir路径在服务模式下可能失效 - Linux 上常见陷阱:Apache 用
libphp.so模块,而 FPM 是独立进程,两者 ini 文件常不在同一位置 - 改完配置后,必须重启对应服务:
sudo systemctl restart apache2或sudo systemctl restart php-fpm;别只信重启命令,要刷新phpinfo()页面二次验证
Windows 下 dll 依赖缺失导致“静默加载失败”
Windows 是重灾区:php -m 显示 pdo_mysql 已加载,PDO::getAvailableDrivers() 却不返回 mysql——问题出在 DLL 依赖链上。
-
php_pdo_mysql.dll本身不带通信能力,它依赖libmysql.dll或mysqlclient.dll;若该文件不在PATH或extension_dir下,加载会静默失败 - 确认 PHP 是 TS 还是 NTS 版本:Apache 模块必须用 TS,PHP-FPM 推荐用 NTS;混用会导致
0xC000007B错误,表现为扩展“存在但不可用” - 用 Dependencies 工具打开
php_pdo_mysql.dll,看红色标记的缺失依赖项 - 临时解法:把
libmysql.dll复制到php.exe同目录,或加到系统PATH;长期应统一部署路径和 ABI 类型
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











