Laravel项目MySQL连接报错:Access denied for user ''@'localhost'求助
Laravel MySQL连接报错SQLSTATE[HY000] [1044]问题排查与解决
错误信息
SQLSTATE[HY000] [1044] Access denied for user ''@'localhost' to database 'database'
错误提示中用户名为空,是核心异常点。
当前环境信息
MySQL用户权限
| 用户名 | 主机名 | 密码 | 全局权限 | 授权权限 |
|---|---|---|---|---|
| root | 127.0.0.1 | 无 | ALL PRIVILEGES | 是 |
.env配置片段
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database DB_USERNAME=root DB_PASSWORD=
database.php配置片段
'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'name' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ],
测试验证
终端执行命令 mysql -u root -p -h 127.0.0.1 -P 3306 database,直接回车跳过密码输入,可成功连接数据库。已执行 php artisan config:clear 并重启服务器,问题仍未解决。
问题根源及修复方案
- 问题本质:
database.php的MySQL配置数组中,用户名对应的配置键错误。Laravel要求用户名的键为username,但当前配置写成了name,导致框架无法读取到正确的用户名参数,最终出现空用户名的连接错误。 - 修复步骤:
- 打开
config/database.php文件,定位到MySQL配置段中的'name' => env('DB_USERNAME', 'forge'),这一行。 - 将键名
name修改为username,修改后该行应为:'username' => env('DB_USERNAME', 'forge'),。 - 执行命令
php artisan config:clear清除配置缓存,确保新配置生效。 - 重启服务器(若使用Laravel内置开发服务器,直接终止后重新启动即可)。
- 打开
修改完成后,Laravel即可正确读取.env中的DB_USERNAME配置,使用root用户正常连接数据库。
内容的提问来源于stack exchange,提问作者Hagar Maher
相关产品推荐
相关产品推荐

