直接原因是php未加载pdo_mysql扩展:需用php -m | grep pdo确认cli环境同时存在pdo和pdo_mysql,再通过phpinfo()核对web环境的loaded configuration file路径及extension=pdo_mysql是否启用,二者必须一致且驱动名严格为'mysql'。

直接原因是 PHP 没加载 pdo_mysql 扩展,不是 ThinkPHP 配置写错了。90% 的情况是环境缺模块或没启用,先别改 database.php,从底层查起。
确认 CLI 和 Web 环境都启用了 pdo_mysql
ThinkPHP 在命令行(如 php think migrate)能跑通,但浏览器访问就报错,大概率是 CLI 和 Web(Apache/Nginx/FPM)用了两套 PHP 配置。
- 终端执行
php -m | grep pdo,必须同时看到pdo和pdo_mysql(注意不是mysqli) - 在 Web 环境下建一个
info.php,内容为<?php phpinfo(); ?>,用浏览器打开,搜索 “PDO drivers”,确认列表里有 mysql(全小写、无下划线、无空格) - 对比两个环境的配置路径:CLI 下运行
php --ini;Web 页面中看 phpinfo() 顶部 “Loaded Configuration File” 路径,确保两者都启用了extension=pdo_mysql
按系统安装或启用对应扩展
Linux 和 Windows 启用方式不同,漏掉任一环节都会失败。
-
Ubuntu/Debian:
sudo apt install php-pdo php-mysql,然后重启服务(如sudo systemctl restart apache2或sudo systemctl restart php8.2-fpm) -
CentOS/RHEL:
sudo yum install php-pdo php-mysqlnd(注意是mysqlnd,不是php-mysql) -
Windows:打开 php.ini,去掉这两行前面的分号:
;extension=php_pdo.dll;extension=php_pdo_mysql.dll
并确认extension_dir指向的目录下真实存在这两个 DLL 文件
检查 ThinkPHP 配置是否合法
即使环境正确,TP6 的配置写错也会触发同样报错。关键字段是 type,它必须严格匹配 PDO 注册的驱动标识符。
-
config/database.php中connections.default.type必须是字符串 'mysql'(全小写,无引号差异,末尾不能有空格) - 禁止写成:
'MySQL'、'pdo_mysql'、'mysqli'、['type' => 'mysql']、"mysql"(双引号在旧版 TP 中可能解析异常) - 若用 PostgreSQL,
type写'pgsql'后,还必须确保已安装并启用了pdo_pgsql扩展
快速验证驱动是否真正可用
绕过框架,用最简 PDO 实例测试,排除 TP 层干扰:
新建 test-pdo.php:
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');
echo "PDO 连接成功";
} catch (PDOException $e) {
echo "失败:" . $e->getMessage();
}
?>
在命令行和浏览器中分别运行,结果一致才说明环境真正就绪。











