Laravel8运行报could not find driver 开启pdo_mysql仍未加载
问题现象
Laravel 8应用运行时抛出数据库驱动缺失异常:
Illuminate\Database\QueryException could not find driver (SQL: select * from information_schema.tables where table_schema = gestiondesservicespourccisdt and table_name = types_interventions and table_type = 'BASE TABLE')
已尝试取消php.ini中extension=pdo_mysql配置项的注释,但通过Apache访问时输出的phpinfo()页面中,PDO DRIVERS列表仍无mysql驱动项。
- 当前运行环境:
PHP 8.1、Apache 2.4、MySQL 8.0.29 - 访问差异:使用
php artisan serve启动本地服务在127.0.0.1:8000访问时,项目运行完全正常 - 项目.env数据库配置:
APP_NAME="GestDSR" APP_ENV=local APP_KEY=base64:2u3gtLuxhkRS1ninoDLi9Spo/cH9EpXxzuuWdQg/trx= APP_DEBUG=true APP_URL=http://192.168.1.120 DB_CONNECTION=mysql DB_HOST=192.168.1.120 DB_PORT=3306 DB_DATABASE=gestiondesservicespourccisdt DB_USERNAME=root DB_PASSWORD=*******
- 数据库权限配置:root账号允许从192.168.1.120地址连接,账号权限无问题
问题根因
PHP不同运行模式(SAPI)会加载独立的php.ini配置文件,两者配置互不影响:
- 执行
php artisan serve时使用CLI(命令行)SAPI,加载的是PHP命令行环境对应的php.ini,你之前修改的pdo_mysql配置仅在CLI环境生效,因此命令行启动的服务访问正常 - 通过Apache访问时使用apache2handler SAPI,加载的是Apache关联路径下的php.ini,这份配置中未开启pdo_mysql扩展,因此会抛出驱动找不到的错误
解决步骤
- 定位Apache实际加载的php.ini路径
在Apache站点根目录新建测试文件test.php,写入内容<?php phpinfo();,通过Apache绑定的地址访问该文件,找到Loaded Configuration File配置项,其显示的路径就是Apache正在读取的php.ini文件,不要改错其他路径下的配置文件。 - 开启对应配置中的pdo_mysql扩展
打开上一步定位到的php.ini文件,搜索pdo_mysql配置行,删除行首的注释分号,即将;extension=pdo_mysql修改为extension=pdo_mysql- Windows环境额外检查
extension_dir配置项,确保其值指向PHP安装目录下的ext扩展文件夹路径,路径错误会导致扩展加载失败 - Linux环境如果通过包管理器安装PHP,可直接安装对应扩展包自动完成配置:Ubuntu/Debian系执行
apt install php8.1-mysql,CentOS/RHEL系执行dnf install php8.1-php-pdo_mysql,无需手动修改ini文件
- Windows环境额外检查
- 保存配置修改后,完全重启Apache服务
- 刷新phpinfo页面,确认
PDO DRIVERS列表中已出现mysql项,此时访问Laravel项目即可正常运行
如果完成上述操作后扩展仍无法加载,检查PHP扩展目录(Windows为ext文件夹、Linux为modules文件夹)下是否存在对应扩展文件:Windows环境检查是否有php_pdo_mysql.dll,Linux环境检查是否有pdo_mysql.so,文件缺失时重新下载对应版本的PHP完整安装包,补全对应文件后重启服务即可。
内容的提问来源于stack exchange,提问作者ayoub
相关产品推荐
相关产品推荐

