Laravel5.8安装运行报could not find driver错误问题咨询
Laravel 报
could not find driver错误排查解决 问题基础信息
相关运行环境版本:
- Laravel版本:5.8.38
- PHP版本:7.4.3
- MySQL版本:8.0.21
问题现象:已完成MySQL数据库配置,且可成功执行php artisan migrate完成数据迁移,但执行数据库查询操作时触发驱动找不到异常,核心报错内容如下:
{ "message": "could not find driver (SQL: select * from `my_admin` where `mobile` = 18912345678 order by `id` asc limit 1)", "exception": "Illuminate\Database\QueryException", "file": "/home/ubuntu/ygd/api/vendor/laravel/framework/src/Illuminate/Database/Connection.php", "line": 664, "trace": [ { "file": "/home/ubuntu/ygd/api/vendor/laravel/framework/src/Illuminate/Database/Connection.php", "line": 624, "function": "runQueryCallback", "class": "Illuminate\Database\Connection", "type": "->" }, { "file": "/home/ubuntu/ygd/api/vendor/laravel/framework/src/Illuminate/Database/Connection.php", "line": 333, "function": "run", "class": "Illuminate\Database\Connection", "type": "->" }, { "file": "/home/ubuntu/ygd/api/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php", "line": 2130, "function": "select", "class": "Illuminate\Database\Connection", "type": "->" } ... ] }
核心原因判断
能正常执行数据迁移,说明PHP命令行(CLI)环境已经正确加载PDO MySQL驱动,查询时报错基本是因为触发查询的PHP运行环境和执行迁移的CLI环境不是同一个,没有加载对应的数据库驱动,属于多SAPI配置不一致、多版本PHP冲突类问题。
分步排查方案
1. 确认触发报错的运行环境是否加载pdo_mysql扩展
根据报错触发场景分别检查:
- Web接口访问触发报错:在项目
public目录下新建临时文件phpinfo.php,写入<?php phpinfo();,访问对应地址后搜索pdo_mysql,确认扩展是否启用,同时记录当前加载的php.ini文件路径,方便后续修改配置。 - 命令行/队列任务触发报错:终端执行
php -m,查看返回的扩展列表中是否存在pdo_mysql项。
如果确认扩展未加载,Ubuntu/Debian系统直接执行对应安装命令即可:
sudo apt-get install php7.4-mysql php7.4-pdo # 安装完成后重启服务 sudo systemctl restart php7.4-fpm # 用Nginx就重启nginx,用Apache就重启apache2 sudo systemctl restart nginx
2. 检查数据库配置是否正确
打开项目根目录.env文件核对配置:
- 确认
DB_CONNECTION值为mysql,不要误填为sqlite、pgsql等其他数据库类型 - 确认
DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD和执行迁移时使用的配置完全一致 - 修改配置后执行
php artisan config:clear清除配置缓存,避免旧缓存导致配置不生效
3. 排查多PHP版本冲突
服务器安装多个PHP版本时,极易出现CLI用PHP7.4、Web服务跑其他PHP版本的情况:
- 执行
ls /etc/php查看服务器上已安装的所有PHP版本 - 核对Nginx/Apache配置中指向的PHP-FPM端口或sock文件对应的PHP版本为7.4,和安装pdo_mysql扩展的版本保持一致
- 命令行执行artisan命令时尽量用全路径指定版本,比如
/usr/bin/php7.4 artisan xxx,避免调用到其他版本的PHP二进制文件
4. 特殊场景处理
以上步骤都验证无效时,检查以下项:
- 打开
config/database.php,确认mysql连接配置下的driver项值为pdo_mysql,没有被误修改 - 检查代码中是否有动态切换数据库连接的逻辑,切换后的目标连接对应驱动是否已安装
- 如果是队列任务触发的报错,修改配置/扩展后必须执行
php artisan queue:restart重启队列worker进程,队列进程会持久加载旧环境配置,不重启不会生效 - 检查php.ini配置中是否存在
disable_functions禁用了相关扩展加载的函数,或者extension_dir扩展目录配置错误导致扩展无法加载
内容的提问来源于stack exchange,提问作者muyang
相关产品推荐
相关产品推荐

