根本原因是php未安装或未启用对应pdo驱动,需先检查php -m或phpinfo()确认pdo及pdo_mysql等驱动存在,再确保thinkphp的type配置为'mysql'等严格匹配的驱动名,最后核对cli与web环境php.ini一致并重启服务。

确认 PHP 是否已启用 PDO 及对应数据库驱动
报 Driver not found 的根本原因,90% 是 PHP 没装或没启对应 PDO 驱动,不是 ThinkPHP 配置错了。先别改配置文件,直接查 PHP 本身。
- 运行
php -m | grep pdo,应看到pdo和pdo_mysql(或pdo_pgsql、pdo_sqlite);缺哪个就装哪个 - 在 Web 环境下,访问
phpinfo()页面,搜索PDO drivers,确认列表里包含你要用的驱动(如mysql),注意不是mysqli - Linux 下常见漏装:Ubuntu/Debian 要
sudo apt install php-pdo php-mysql;CentOS/RHEL 是php-pdo和php-mysqlnd(不是php-mysql) - Windows 用户检查
php.ini中是否取消了;extension=php_pdo.dll和;extension=php_pdo_mysql.dll前的分号
ThinkPHP 配置中 driver 名称必须与 PDO 驱动名严格一致
ThinkPHP 的 database.php 里 type 字段不是写“mysql”,而是 PDO 扩展注册的驱动名,大小写和下划线都敏感。
- 合法值只有:
mysql、pgsql、sqlite、sqlsrv(SQL Server)、oci(Oracle),不能写成MySQL、pdo_mysql或mysqli - 示例正确配置:
'type' => 'mysql',而不是'type' => 'pdo_mysql'—— 后者会直接触发Driver not found - 如果用 PostgreSQL,必须确保系统已安装
pdo_pgsql,且配置写'type' => 'pgsql',写'pgsql'少字母或加空格都会失败
CLI 与 Web 使用不同 php.ini 导致驱动加载不一致
命令行跑 php think migrate 成功,但浏览器访问报错?大概率 CLI 和 Apache/Nginx 加载了不同的 php.ini,驱动只在一个环境里开了。
- CLI 下执行
php --ini查配置路径;Web 下用phpinfo()查 “Loaded Configuration File” - 对比两个
php.ini文件,确认extension=...行是否都启用,尤其注意 Windows 下php_pdo.dll路径是否正确(extension_dir设置影响 DLL 加载) - 重启 Web 服务(如
sudo systemctl restart apache2或nginx)后,务必刷新phpinfo()页面验证,别只信重启命令
Composer 自动加载未触发 PDO 驱动检查(仅限 TP6+)
TP6 开始用 think-orm 替代内置 DB 类,但驱动检测逻辑仍在 Connection 构造阶段。若项目从低版本升级,可能残留旧引导逻辑。
- 检查
config/database.php中connections.default.type是否为字符串而非数组;TP6 要求是'mysql'这类字符串,不是['type' => 'mysql'] - 运行
composer dump-autoload确保类映射更新,虽然不直接修复驱动缺失,但避免因自动加载缓存导致错误掩盖真实问题 - 如果用了自定义连接类,确认其
__construct()中调用的父类构造函数传参格式正确,例如:parent::__construct($config, $builder),错传会导致驱动名被忽略
最常被跳过的动作:改完 php.ini 没重启 Web 服务,或者以为重启了其实没生效;还有人把 pdo_mysql 和 mysqli 当一回事,其实它们完全不兼容。PDO 驱动名、PHP 配置路径、服务进程三者必须对得上号,少一个环节就报这个错。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










