先看日志,再查驱动,最后核配置:90%的Laravel数据库连接失败卡在这三步;首查storage/logs/laravel.log中最新SQLSTATE或PDOException报错,再验证PHP是否启用对应pdo扩展(如pdo_mysql),最后逐项核对.env中DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD及权限,并执行php artisan config:clear。

先看日志,再查驱动,最后核配置——90% 的 Laravel 数据库连接失败,卡在这三步里。
看 storage/logs/laravel.log 里的第一行 error
别跳过这步。Laravel 报错时,storage/logs/laravel.log 一定先记一笔。打开它,找最新一条带 SQLSTATE 或 PDOException 的记录:
-
SQLSTATE[HY000] [1045] Access denied for user→ 用户名/密码错,或权限没开 -
SQLSTATE[HY000] [2002] No such file or directory→DB_HOST=localhost导致 PHP 尝试走 Unix socket,但 MySQL 没配 socket 路径 -
SQLSTATE[HY000] [2002] Connection refused→ MySQL 服务根本没起来,或DB_PORT不对 -
could not find driver→ PHP 缺扩展,不是 Laravel 配置问题
如果日志空或只有 production.ERROR: Undefined index,先确认 .env 里 APP_DEBUG=true 已开启(开发环境必须)。
确认 php -m 输出里有对应 pdo_ 扩展
Laravel 不自带数据库驱动,全靠 PHP 的 PDO 扩展撑着。连不上,大概率是 pdo_mysql、pdo_pgsql 或 pdo_sqlite 没启用:
- 运行
php -m | grep pdo,检查输出是否含pdo和pdo_mysql(MySQL)或pdo_pgsql(PostgreSQL) - 如果只有
pdo没具体驱动,说明扩展未安装或未启用;extension=pdo_mysql要在php.ini里取消注释 - Docker 环境注意:PHP 镜像可能默认不装
pdo_pgsql,得在Dockerfile里加docker-php-ext-install pdo pdo_pgsql - Mac M1 用户常见坑:
brew install php@8.2后,php.ini路径可能是/opt/homebrew/etc/php/8.2/php.ini,别改错文件
核对 .env 里 DB_* 配置是否和实际服务一致
配置写错是最隐蔽的“低级错误”,尤其多项目共用一个本地数据库时:
-
DB_HOST别写localhost:改用127.0.0.1可绕过 socket 连接问题 -
DB_PORT要和数据库真实端口一致(MySQL 默认3306,PostgreSQL 默认5432) -
DB_DATABASE名称大小写敏感(Linux 下),别拼错或漏下划线 -
DB_USERNAME必须有目标库的SELECT/INSERT/UPDATE权限,用mysql -u root -p登进去执行SHOW GRANTS FOR 'your_user'@'%';确认 - 改完
.env后,记得清配置缓存:php artisan config:clear(否则env()仍读旧值)
Apache + PHP NTS 模式下 getenv() 会串配置
如果你本地跑多个 Laravel 项目(比如 test.me 和 api-test.me),且 Apache 是 worker/prefork 混用、PHP 是线程安全(TS)版本,getenv() 可能被不同请求污染,导致一个项目读到另一个项目的 .env 值:
- 现象:明明
.env写的是DB_DATABASE=api_db,但php artisan tinker里config('database.connections.mysql.database')返回的是test_db - 验证方式:在
config/database.php里临时加dd($_ENV['DB_DATABASE'] ?? 'not set');,看是否和.env一致 - 解法优先级:① 改用 PHP NTS 版本;② Apache 改为
prefork模式;③ 直接在config/database.php里硬编码配置,绕过env()
这个点容易被忽略,因为报错不直接指向它,只表现为“配置明明对,就是连错库”。


















