最直接办法是执行PDO::getAvailableDrivers(),在CLI和Web环境分别运行check.php验证;需确保php.ini中extension正确启用、extension_dir路径准确、pdo_mysql文件真实存在且可读,并确认CLI与Web使用同一配置。

确认当前PHP实际加载了哪些PDO驱动
最直接的办法是执行 PDO::getAvailableDrivers(),而不是猜或查文档。写个 check.php 文件,内容就一行:
<?php print_r(PDO::getAvailableDrivers()); ?>然后在命令行和Web环境下分别运行它。如果只看到
Array ( [0] => sqlite ),说明 pdo_mysql 根本没加载,别急着改ThinkPHP配置。
检查php.ini里extension是否真正启用
很多人以为取消了 ;extension=php_pdo_mysql.dll 前的分号就完事了,其实还有几个关键点:
-
extension_dir路径必须指向真实存放.so(Linux/macOS)或.dll(Windows)文件的目录,路径错一个字符都不行 - Windows下要同时启用
php_pdo.dll和php_pdo_mysql.dll,缺一不可 - Linux下常见错误是只装了
php-pdo包,漏了php-mysqlnd或php-pgsql等具体驱动包 - CLI和Web环境可能用不同
php.ini:用php --ini查CLI路径,用phpinfo()页面查Web路径,二者必须一致
验证pdo_mysql.so文件是否存在且可读
光看配置不够,得确认文件真在那儿、权限也对:
- Linux/macOS:运行
find /usr -name "pdo_mysql.*" 2>/dev/null,找到后检查是否被ls -l显示为可读 - 如果用Docker,注意镜像里是否真的安装了扩展,
docker exec -it your_php_container php -m | grep pdo是最快验证方式 - Ubuntu/Debian用户容易忽略:安装命令是
sudo apt install php-mysql(不是php-mysqlnd的旧名),新版已统一为该包名 - CentOS/RHEL 8+ 用户注意:
php-pdo和php-mysqlnd需同时yum install,且需重启httpd或php-fpm
DSN字符串写错也会触发could not find driver
这个错误不只发生在驱动没装时,DSN协议前缀拼错也会让PDO找不到对应模块:
立即学习“PHP免费学习笔记(深入)”;
-
mysql:host=...是对的;mysqli:host=...、MySQL:host=...、myqsl:host=...(少个l)都会报同样错误 - PostgreSQL必须用
pgsql:host=...,不是postgres:或postgresql: - SQLite用
sqlite:/path/to/db.sqlite,路径必须存在且PHP有读写权限,否则也可能退化成驱动未找到的假象



















