php数据库怎么进用框架laravel进_phpLaravel连库法【教程】

Laravel连数据库核心是正确配置.env并验证连接生效,需确保PDO驱动已启用、.env字段完整(含DB_USERNAME/DB_PASSWORD)、DB_HOST不写localhost(容器/远程场景)、清除config:cache避免缓存干扰。

PHP 用 Laravel 连数据库,核心不是“怎么进”,而是配置好 .env 和验证连接是否真正生效——很多问题其实出在环境变量没加载、驱动未安装或权限/网络不通,而不是代码写错。

确认 DB_DRIVER 和扩展已就位

Laravel 不直接操作数据库,它靠 PDO 驱动。你选的数据库类型必须对应已启用的 PHP 扩展:

  • mysqlmysqlnd → 要求 pdo_mysql 扩展已启用(不是 mysql 扩展,那个已废弃)
  • pgsql → 要求 pdo_pgsql
  • sqlite → 要求 pdo_sqlite,且 database/database.sqlite 文件可写
  • sqlsrv(SQL Server)→ 要求 pdo_sqlsrv,Windows 下较稳,Linux 需额外配置 ODBC

运行 php -m | grep pdo 看输出里有没有对应模块;Laravel 启动时报 Driver not found 就先查这个。

.env 里的数据库配置项不能漏字段

常见错误是只填了 DB_HOSTDB_DATABASE,却忘了 DB_USERNAMEDB_PASSWORD,或者用了空密码但没写成 DB_PASSWORD=(注意等号右边为空)。完整最小集是:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_db_name
DB_USERNAME=your_user
DB_PASSWORD=your_pass

如果数据库在 Docker 或远程服务器上,DB_HOST 别写 localhost ——它在容器内会走 Unix socket,应改用真实 IP 或服务名(如 mysql);DB_PORT 也别假设是 3306,先 telnet host port 确认通不通。

执行 php artisan tinker 手动测试连接

别急着跑 migration 或 model,先用交互式终端验证底层连得通:

> DB::connection()->getPdo();
# 如果报错:SQLSTATE[HY000] [2002] Connection refused → 网络或服务没起来
# 如果返回 PDO 对象 → 连接成功

也可以试一个最轻量查询:

> DB::select('SELECT 1 as ok');
# 返回 [['ok' => 1]] 表示认证、权限、语法都 OK

这里不推荐直接用 php artisan migrate 测试,因为 migration 会读取 config/database.php 并合并 .env,中间有缓存层(比如 config:cache 没清),容易误判。

本地开发时 config:cache 是个隐藏陷阱

运行过 php artisan config:cache 后,Laravel 就不再读 .env,而是读缓存的 bootstrap/cache/config.php。改了 .env 却连不上?先删缓存:

php artisan config:clear
# 或直接删文件:rm bootstrap/cache/config.php

这个缓存只该在生产环境部署时生成,开发阶段开着它,等于自己给自己埋雷。

真正卡住人的,往往不是语法或命令,而是扩展没开、端口不通、.env 被缓存、或者 MySQL 用户没授远程权限(CREATE USER 'x'@'%' IDENTIFIE

D BY 'y'GRANT ALL ON db.* TO 'x'@'%' 缺一不可)。