结论:错误源于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,内容为<?php phpinfo(); ?>,访问它,重点看 “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 被当成当前命名空间下的类,而不是全局的。
- 错误写法:
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() 显示的版本、扩展列表可能不一致。动手前先确认你调试的是哪一层的环境,否则改半天都是白忙。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











