根本原因是php未加载pdo_mysql扩展,需同时检查cli和web环境的php.ini中pdo及pdo_mysql是否启用,确保extension_dir路径正确且扩展文件存在,并验证pdo基础模块与pdo_mysql驱动均被加载。

PHP 8.0 的 PDO_MySQL 驱动无法加载,根本原因不是 PHP 8.0 本身不兼容,而是环境配置中某个环节断开了——PDO 找得到、但 pdo_mysql 找不到;或者 pdo_mysql 装了、但没真正进到当前运行的 PHP 环境里。
确认你用的是 PDO,不是 MySQLi
报错 could not find driver 几乎只出现在 PDO 场景。检查你的代码:
- 用了
new PDO('mysql:host=...')或框架(如 ThinkPHP、Laravel)默认数据库连接 → 必须有pdo_mysql扩展 - 用了
mysqli_connect()或new mysqli()→ 需要的是mysqli扩展,pdo_mysql完全无效
检查扩展是否真实启用(注意 CLI 和 Web 环境分离)
很多人只在命令行执行 php -m | grep pdo_mysql 看到有,就以为没问题。但 Web 请求走的是 Apache/Nginx + PHP-FPM,可能加载的是另一份 php.ini:
- 命令行查配置:
php --ini→ 看 “Loaded Configuration File” 路径 - Web 环境查配置:建一个
info.php,内容为<?php phpinfo(); ?>,浏览器访问后搜索 “Loaded Configuration File” - 两个环境的
php.ini都要确保含有一行未注释的:
Linux:extension=pdo_mysql或extension=pdo_mysql.so
Windows:extension=php_pdo_mysql.dll - 改完必须重启对应服务:
sudo systemctl restart apache2或sudo systemctl restart php-fpm
验证扩展文件存在且路径正确
即使配置写了 extension=pdo_mysql,如果 extension_dir 指向错误目录,PHP 会静默跳过加载:
- 在
phpinfo()页面搜索extension_dir,确认该路径下真实存在pdo_mysql.so(Linux)或php_pdo_mysql.dll(Windows) - 常见错误:
extension_dir指向了旧 PHP 版本目录,或路径拼写有空格/大小写错误 - Ubuntu/Debian 用户可直接安装:
sudo apt install php-mysql,它会自动把扩展放进正确位置并更新配置
检查 PDO 基础模块和驱动是否同时就位
PDO 是两层结构:上层是通用 pdo 扩展,下层是具体数据库驱动(如 pdo_mysql)。缺一不可:
- 运行
php -m | grep -E '^(pdo|pdo_mysql)$',应同时看到pdo和pdo_mysql - 若只有
pdo没有pdo_mysql→ 驱动缺失或未启用 - 若两者都有但仍报错 → 检查 MySQL 8.0+ 认证插件(如
caching_sha2_password),需在 DSN 中加;allowPublicKeyRetrieval=true或将用户认证方式改为mysql_native_password
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











