php -m 显示 pdo 但无 pdo_mysql,说明 mysql 驱动未加载;需确认 cli 与 web 环境 php.ini 是否一致、extension_dir 下文件是否存在、php.ini 中 extension=pdo_mysql 是否启用,并重启对应服务验证。

php -m 显示 pdo 但没 pdo_mysql,说明扩展没加载
PHP 8.1 默认编译进 pdo 扩展,但 pdo_mysql 是独立模块,不启用就等于没 MySQL 驱动。运行 php -m | grep pdo 只看到 pdo,没 pdo_mysql,基本可断定是配置问题,不是 PHP 版本或安装包缺陷。
常见诱因包括:
– 当前 CLI 和 Web 使用的 php.ini 不同(比如 Apache 加载的是 /etc/php/8.1/apache2/php.ini,而 CLI 读的是 /etc/php/8.1/cli/php.ini)
– extension_dir 路径下压根没有 pdo_mysql.so(Linux/macOS)或 php_pdo_mysql.dll(Windows)
– php.ini 里写了 extension=pdo_mysql.so,但实际文件名是 pdo_mysql(PHP 8.0+ 允许省略后缀)
Ubuntu/Debian 上用 apt 安装并启用最稳
如果你用系统包管理器安装的 PHP 8.1(如 php8.1),直接装对应扩展包即可,不用碰编译或手动拷文件:
PHP 8.5.12 RC 1 候选版修复 BZ2、DOM、PDO、Opcache/JIT 和扩展内存安全问题,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
sudo apt update && sudo apt install php8.1-mysql- 该命令会自动在
/etc/php/8.1/*/conf.d/20-pdo_mysql.ini写入extension=pdo_mysql - 重启服务:
sudo systemctl restart apache2(Apache)或sudo systemctl restart php8.1-fpm(Nginx + FPM) - 验证:CLI 下跑
php -r "print_r(PDO::getAvailableDrivers());",输出应含mysql
phpenv 编译安装 PHP 8.1 时必须加 --with-pdo-mysql
用 phpenv install 8.1.22 这类方式从源码编译,pdo_mysql 不会自动包含——它依赖 MySQL 开发头文件,且需显式启用:
- 先装依赖:
sudo apt install libmysqlclient-dev(Ubuntu/Debian)或sudo yum install mysql-devel(CentOS/RHEL) - 再设置编译参数:
CONFIGURE_OPTS="--with-pdo-mysql" phpenv install 8.1.22 - 装完切换版本:
phpenv shell 8.1.22,然后确认:php -m | grep -E '^(pdo|pdo_mysql)$'必须两行都出 - 若提示
configure: error: Cannot find MySQL header files,说明开发包没装对,或mysql_config不在$PATH
Windows phpEnv 环境下要配对 DLL 文件名
Windows 的 phpEnv 常见问题是扩展名写错。PHP 8.1+ NTS 版本默认认 extension=pdo_mysql,但有些精简包只提供 php_pdo_mysql.dll:
- 打开 phpEnv 界面右下角显示的 PHP 版本 → 右键 → “打开 php.ini”
- 查
extension_dir值(如D:\phpenv\php\php-8.1-x64\ext),进该目录确认是否存在php_pdo_mysql.dll - 如果存在,php.ini 中写:
extension=php_pdo_mysql.dll;如果不存在但有pdo_mysql.dll,就写后者 - 切勿写成
extension=pdo_mysql(无后缀)却指望它自动匹配 DLL —— Windows 下这招不一定生效 - 改完点 phpEnv 界面的 “Restart PHP”,不是只重启 Apache/Nginx
真正容易被忽略的是:CLI 和 Web 环境各自加载一套配置,php -m 正常不代表网页能连 MySQL。务必用脚本实测连接,比如 php -r "$pdo = new PDO('mysql:host=localhost;dbname=information_schema;charset=utf8mb4', 'root', ''); echo 'OK';" —— 报 could not find driver 就是扩展没走通,报 Access denied 才算成功了一半。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










