pdo_mysql扩展未加载需先确认php安装方式:包管理器安装直接装php-pdo-mysql;源码编译未启用--with-pdo-mysql则需手动编译ext/pdo_mysql,注意phpize、php-config和mysql_config路径正确,extension_dir与so文件名匹配,并重启web服务验证连接。

pdo_mysql 扩展没加载?先确认 PHP 是不是源码编译安装的
如果你用的是系统包管理器装的 PHP(比如 apt install php 或 yum install php),直接装 php-pdo-mysql 就行,不用自己编译。只有当你自己从 PHP 源码 ./configure && make && make install 编译安装、且当时没启用 PDO MySQL 支持时,才需要单独编译 pdo_mysql 扩展。
判断方法:运行 php -i | grep "Configure Command",如果输出里有 --with-pdo-mysql,说明编译时已内置;如果没有,且 php -m | grep pdo_mysql 为空,则必须手动编译扩展。
手动编译 pdo_mysql.so 的关键三步
进到 PHP 源码目录下的 ext/pdo_mysql 子目录,按顺序执行:
-
/path/to/php/bin/phpize—— 必须用你当前 PHP 安装路径下的phpize,否则生成的.so会不兼容 -
./configure --with-php-config=/path/to/php/bin/php-config --with-pdo-mysql=/usr/bin/mysql_config——--with-pdo-mysql后面填的是mysql_config路径,不是 MySQL 安装根目录;用which mysql_config确认,找不到就装libmysqlclient-dev(Debian/Ubuntu)或mysql-devel(RHEL/CentOS) -
make && make install—— 成功后会输出类似Installing shared extensions: /path/to/php/lib/php/extensions/no-debug-zts-20220829/,记下这个路径
php.ini 里 extension=pdo_mysql.so 总是不生效?检查这几点
扩展名和路径必须严格匹配:
- 确认
extension_dir指向的是上一步make install输出的实际目录,不是默认值 - 确认
extension=pdo_mysql.so这行没被注释(前面不能有分号;) - 确认文件名对得上:PHP 8.0+ 默认生成的是
pdo_mysql.so,但老版本可能生成pdo_mysql.la或名字带版本号(如pdo_mysql.so.7.4),ls -l看清实际文件名 - 如果用了
opcache,改完php.ini后要重启php-fpm或 Apache/Nginx,光 reload 不够
验证 pdo_mysql 是否真可用,别只看 phpinfo()
phpinfo() 显示 “pdo_mysql” 只代表模块加载了,不代表能连上数据库。真正要测通:
- 写个最小测试脚本:
<?php try { $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', ''); echo "PDO_MYSQL 连接成功"; } catch (Exception $e) { echo "失败:" . $e->getMessage(); } ?> - 注意错误信息里是否含
Driver not found(扩展没加载)、Connection refused(MySQL 没启)、Unknown database(库不存在)—— 这三类原因要分开排查 - 如果报
mysql.sock找不到,说明 PDO 默认走 socket 连接,但你的 MySQL 实际监听在 TCP(比如 Docker 环境),这时得显式写host=127.0.0.1强制走 TCP
最常被忽略的是:编译时用的 mysql_config 和运行时 MySQL 实例的协议/套接字路径不一致,导致连接阶段出错,而不是加载阶段。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











