PHP 8.1 默认不启用pdo_mysql扩展,需通过php -m | grep pdo_mysql确认是否加载;未输出则需在Ubuntu上执行sudo apt install php-mysql并重启apache2或php-fpm;Windows需检查php.ini中extension=php_pdo_mysql.dll及ext目录文件存在性;还需确保CLI与Web环境使用同一php.ini,并验证MySQL客户端库完整性。

PHP 8.1 默认不自动启用 pdo_mysql 扩展,即使你装了 PHP,也得手动确认它已加载 —— 否则 PDO 构造函数会报 “could not find driver” 错误。
检查 pdo_mysql 是否已启用
别猜,直接查。在终端运行:
php -m | grep pdo_mysql
如果没输出,说明扩展没启用(哪怕文件存在);如果输出 pdo_mysql,再用 php --ini 确认当前生效的 php.ini 路径,避免改错配置文件。
Ubuntu/Debian 上安装并启用 pdo_mysql
多数情况下,你缺的是系统包,不是 PHP 源码编译。执行:
立即学习“PHP免费学习笔记(深入)”;
-
sudo apt update && sudo apt install php-mysql(注意:不是php-pdo-mysql,新版 Ubuntu 包名已统一为php-mysql) - 安装后,
pdo_mysql通常会自动写入php.ini,但得重启服务才生效:sudo systemctl restart apache2或sudo systemctl restart php8.1-fpm - 若仍不显示,手动检查
/etc/php/8.1/mods-available/mysql.ini是否存在,且内容为extension=pdo_mysql;再确认该文件是否被phpenmod mysql启用
Windows 或源码编译 PHP 时启用 pdo_mysql
这类环境不会自动配好扩展路径,容易卡在 .dll 或 .so 加载失败:
- Windows 下确保
php.ini中有extension=php_pdo_mysql.dll(不是pdo_mysql),且该 DLL 文件确实在ext/目录下 - Linux 源码编译 PHP 时,必须加
--with-pdo-mysql参数,否则即使装了 MySQL 开发头文件(libmysqlclient-dev),pdo_mysql也不会编译进去 - 无论哪种方式,都需确认
extension_dir指向正确目录,否则extension=pdo_mysql会静默失败
验证连接时遇到 “driver not found” 的真实原因
有时 php -m 显示已启用,但 Web 请求里仍报错 —— 这大概率是 CLI 和 FPM/Apache 使用了不同的 php.ini:
- 在 Web 环境中建一个
info.php,内容为<?php phpinfo(); ?>,访问后搜索Loaded Configuration File,看实际加载的是哪个php.ini - 常见坑:CLI 用
/etc/php/8.1/cli/php.ini,而 Nginx + PHP-FPM 用/etc/php/8.1/fpm/php.ini,两个文件都要检查extension=pdo_mysql - 还有更隐蔽的情况:MySQL 8.0 默认认证插件是
caching_sha2_password,PHP 8.1 的pdo_mysql驱动可能不支持,此时要改用户认证方式:ALTER USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass';
最常被忽略的一点:扩展启用只是第一步,pdo_mysql 依赖底层 MySQL 客户端库(如 libmysqlclient)。如果系统里删过 MySQL 或换过版本,这个库可能丢失或路径错位,导致扩展加载成功但运行时报 “driver not found”。这时候光看 php -m 是不够的。



















