You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.5报错“Class 'PDO' not found”求助

解决“Class 'PDO' not found”但CLI迁移正常的问题

这问题我之前帮同事排查过,核心原因大概率是Web服务器使用的PHP环境和你CLI下的PHP不是同一个——CentOS系统里经常出现这种情况,CLI PHP和Apache/Nginx加载的PHP配置、甚至安装包都可能是分开的,这就导致你在CLI里能看到PDO,但Web端调用的PHP没装这个扩展。

下面是一步步的排查和解决步骤:

1. 确认Web环境的PHP状态

首先得搞清楚Web端用的PHP到底是什么情况:

  • 在你的网站根目录新建一个phpinfo.php文件,内容如下:
    <?php phpinfo(); ?>
    
  • 访问这个文件(比如http://你的域名/phpinfo.php),在页面里搜索PDO相关的条目:
    • 如果找不到PDO的任何信息,说明Web端的PHP确实没装这个扩展;
    • 同时对比页面里的PHP版本和你CLI下执行php -v得到的版本,如果不一样,就坐实了是两个独立的PHP环境。

2. 安装Web环境对应的PDO扩展

根据你Web端的PHP版本和Web服务器类型,用yum安装对应的扩展:

  • 如果是Apache服务器,直接安装对应版本的PDO扩展,比如PHP7.4的话:
    yum install php74-php-pdo php74-php-pdo_mysql
    
    (如果是默认PHP版本,直接用yum install php-pdo php-pdo_mysql)
  • 如果是Nginx搭配php-fpm,要确保php-fpm对应的扩展安装完成:
    yum install php-fpm php-pdo php-pdo_mysql
    
  • 安装完成后,重启Web服务器或php-fpm:
    Apache:systemctl restart httpd
    Nginx+php-fpm:systemctl restart php-fpm nginx

3. 检查Web PHP的php.ini配置

有时候扩展装了,但php.ini里没开启:

  • 从phpinfo页面找到Loaded Configuration File的路径(比如/etc/php.ini或者/etc/php74/php.ini);
  • 打开这个配置文件,搜索以下两行,确保前面没有注释符号;:
    extension=pdo.so
    extension=pdo_mysql.so
    
  • 修改后再次重启Web服务器/php-fpm。

4. 验证修复

  • 先删掉刚才的phpinfo.php(避免安全风险);
  • 重新访问你的网站,看“Class 'PDO' not found”错误是否消失;
  • 也可以写个简单的测试脚本验证PDO连接:
    <?php
    try {
        $pdo = new PDO('mysql:host=localhost;dbname=你的数据库名', '数据库用户名', '数据库密码');
        echo "PDO连接成功!";
    } catch (Exception $e) {
        echo "连接失败:" . $e->getMessage();
    }
    ?>
    
    放到网站目录访问,看输出结果。

为什么CLI的php artisan migrate:refresh没问题?

因为artisan命令是通过CLI(命令行)执行的,你已经用php -m确认了CLI环境的PHP已经安装了PDO扩展,所以迁移命令能正常运行,但Web端用的是另一个PHP环境,没装PDO,才会报错。

内容的提问来源于stack exchange,提问作者lonestar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:38:35