Laravel项目部署至000webhostapp免费主机时数据库连接错误求助
解决Laravel部署到000webhostapp时的SQL连接拒绝错误
这个SQLSTATE[HY000] [2002] Connection refused错误是Laravel部署到免费主机时的常见问题——核心原因是你的项目没能和000webhost的数据库建立有效连接,虽然你能用phpMyAdmin成功访问,但Laravel的配置大概率有几个关键细节没对齐,我给你一步步排查:
1. 先核对数据库核心连接参数(别依赖默认值!)
000webhost的免费主机数据库不允许用localhost作为主机地址,而且所有数据库资源(用户名、库名)都带有平台专属前缀,你得从000webhost控制面板里提取准确信息:
- 登录000webhost面板,进入项目的「MySQL Databases」页面,这里可以看到:
- Database Host: 通常是类似
mysql.hostinger.com的专属域名(绝对不能填localhost) - Database Name: 格式为
uXXXXXXXXX_自定义库名(比如u123456789_myblog) - Database Username: 同样带前缀,比如
u123456789_admin - Database Password: 你创建数据库时设置的密码,注意是否包含特殊字符
- Database Host: 通常是类似
2. 重点检查.env文件的配置(优先级高于database.php)
Laravel默认优先读取.env里的数据库变量,哪怕你在config/database.php里写了配置,.env不对就白搭。确保你的.env数据库配置是这样的:
DB_CONNECTION=mysql DB_HOST=【从000webhost面板复制的数据库主机地址】 DB_PORT=3306 DB_DATABASE=【完整的数据库名】 DB_USERNAME=【完整的数据库用户名】 DB_PASSWORD=【你的数据库密码】
⚠️ 注意:如果密码里包含#、$、!这类特殊字符,记得用双引号把密码括起来,比如DB_PASSWORD="myp@ssw0rd#123",避免解析错误。
3. 清除Laravel的配置缓存
部署后Laravel可能缓存了旧的配置,导致新的数据库参数没生效,你需要清除缓存:
- 如果000webhost提供了终端权限,执行这两条命令:
php artisan config:clear php artisan cache:clear - 如果没有终端,直接删除项目根目录下
bootstrap/cache文件夹里的config.php文件,Laravel就会重新读取最新配置。
4. 确认数据库用户的连接权限
虽然你能用phpMyAdmin连接,但要确保这个数据库用户允许从Laravel所在的服务器连接:
- 登录phpMyAdmin,点击顶部的「用户账户」,找到你的数据库用户
- 编辑该用户,把「主机」选项设置为
%(允许任何主机连接),然后保存 - 000webhost通常默认配置好了这个,但有时候会有例外,检查一下没坏处
5. 快速测试连接的小技巧
如果还是找不到问题,可以加个测试路由获取更详细的错误信息:
在routes/web.php里添加这段代码:
Route::get('/test-db', function () { try { \DB::connection()->getPdo(); return "✅ 数据库连接成功!"; } catch (\Exception $e) { return "❌ 连接失败:" . $e->getMessage(); } });
部署后访问你的域名+/test-db,就能看到比原错误更精准的失败原因。
最后补充几个常见坑
- 000webhost免费主机有数据库连接数限制,但刚部署的话基本不会触发这个问题;
- 尽量通过
.env管理数据库配置,不要手动修改config/database.php的默认mysql配置,避免环境混淆; - 确保你上传的项目文件是完整的,尤其是
.env文件(很多人会忽略上传这个文件)。
内容的提问来源于stack exchange,提问作者amiega
相关产品推荐
相关产品推荐

