跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

phpEnv提示PHP Fatal error: Class ‘PDO’ not found 解决PDO组件缺失

结论:错误源于PHP未加载PDO扩展,非代码错误;95%因扩展未安装、未启用或环境不一致导致。需用php -m确认pdo模块存在,检查php --ini路径下php.ini中extension=pdo是否启用,CentOS/RHEL还需安装php-pdo和php-mysqlnd包,重启对应服务(httpd/php-fpm),并区分CLI与Web环境配置差异。 直接说结论:这个错误不是代码写错了,是 PHP 运行时根本没加载
PDO
类——它压根不存在于当前 PHP 实例里。95% 的情况是扩展没装、没启、或启错环境了。 php -m 看不到 pdo 模块 这是最常见也最容易确认的起点。执行命令后如果输出里没有
pdo
,说明扩展根本没生效。 先查你实际用的是哪个
php.ini
:
php --ini
,注意看 “Loaded Configuration File” 路径,别改错文件 打开那个
php.ini
,搜索
extension=pdo
—— 如果是注释状态(开头有分号),去掉分号;如果整行都没有,就手动加一行:
extension=pdo
有些系统(如 CentOS/RHEL)把扩展拆成独立包,
pdo
核心和驱动是分开的,必须同时装:
yum install php-pdo php-mysqlnd
(PHP 7/8)或
dnf install php-pdo php-mysqlnd
(较新版本) 改完配置后,必须重启 Web 服务(
systemctl restart httpd
或
systemctl restart php-fpm
),光重启 nginx 不够,它不直接管 PHP 扩展加载 phpinfo() 显示 PDO support enabled,但脚本仍报错 这说明 PHP CLI 和 Web SAPI 加载的是两套配置,你看到的
phpinfo()
是 Apache/FPM 下的,而你在终端跑
php -m
看的是 CLI 的。 在 Web 页面里新建一个
info.php
,内容为
,访问它,重点看 “Loaded Configuration File” 和 “Additional .ini files parsed” 两栏 对比 CLI 的
php --ini
输出,确认路径是否一致;如果不一致,Web 端可能读的是
/etc/php.d/10-pdo.ini
这类碎片配置,要检查对应文件是否存在且内容正确 某些环境(如 cPanel、Plesk)会为每个站点生成独立的
.user.ini
或
php.ini
,它们会覆盖全局配置,删掉或检查其中有没有禁用扩展的指令 用了命名空间却忘了 use PDO 虽然少见,但在现代 PHP 项目(尤其 Laravel、CakePHP)里容易踩坑:类名
PDO
被当成当前命名空间下的类,而不是全局的。 PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 立即学习 “ PHP免费学习笔记(深入) ”; 错误写法:
new PDO(...)
在
namespace App\DB;
下会尝试实例化
App\DB\PDO
,当然找不到 正确写法:在文件顶部加
use PDO;
,或者直接用完整路径
new \PDO(...)
注意:这个错误报的是
Class 'App\DB\PDO' not found
,不是
Class 'PDO' not found
—— 如果报的是后者,说明问题不在命名空间 真正麻烦的点在于:同一个服务器上 CLI、Apache、FPM、甚至不同 vhost 可能用完全不同的
php.ini
,而
php -v
和
phpinfo()
显示的版本、扩展列表可能不一致。动手前先确认你调试的是哪一层的环境,否则改半天都是白忙。

相关文章