Unity构建后数据库连接丢失问题求助(OpenServer+PHP+MySQL)
Unity构建后无法连接本地数据库(OpenServer+PHP+MySQL)
问题描述
我在Unity中开发了对接外部数据库的项目,使用OpenServer搭建本地服务器,项目采用OpenGL渲染模式。Unity编辑器内可正常连接数据库,但构建后的程序连接失效。
- Unity端连接代码:
WWWForm form = new WWWForm(); form.AddField("QCode", StaticData.CodeQuest); WWW www = new WWW("http://localhost",form); yield return www;
- PHP端PDO连接代码:
$pdo = new PDO('mysql:host=localhost;dbname=Quest-DB;charset=utf8;','root', '123456');
OpenServer日志显示编辑器和构建程序都发送了请求,但构建后仍无法正常连接。
排查与解决方案
1. 替换localhost为本地IP地址
构建后的程序运行时,localhost可能指向程序自身的沙箱环境(尤其是Windows打包程序),而非你的本地服务器。将Unity代码中的http://localhost改为你的本地IPv4地址(可通过cmd输入ipconfig查看),比如http://192.168.1.100。同时可以测试将PHP中的localhost替换为该IP,确保连接路径一致。
2. 替换已弃用的WWW类
Unity的WWW类已被标记为弃用,兼容性较差且错误排查不便,建议改用UnityWebRequest,同时添加错误捕获逻辑:
WWWForm form = new WWWForm(); form.AddField("QCode", StaticData.CodeQuest); using (UnityWebRequest www = UnityWebRequest.Post("http://你的本地IP地址", form)) { yield return www.SendWebRequest(); if (www.result != UnityWebRequest.Result.Success) { Debug.LogError(www.error); // 输出具体错误信息,直接定位问题 } else { Debug.Log("请求成功: " + www.downloadHandler.text); } }
3. 检查OpenServer与防火墙设置
- 确认OpenServer的80端口(默认端口)未被其他程序占用,可在OpenServer控制面板中切换端口测试。
- 检查Windows防火墙是否允许构建后的程序访问网络,或临时关闭防火墙测试连接。
- 确认OpenServer根目录的读写权限,确保构建程序能正常访问PHP脚本。
4. 查看PHP错误日志
OpenServer收到请求不代表PHP执行正常,查看PHP错误日志(路径一般为OpenServer\modules\php\[你的PHP版本]\logs),排查是否存在PDO连接错误,比如:
- MySQL服务未启动
- 数据库名称、用户名或密码错误
- 字符集不兼容
5. 确认MySQL连接权限
检查root用户是否允许从本地IP连接,若使用自定义IP而非localhost,需在MySQL中授权:
GRANT ALL PRIVILEGES ON `Quest-DB`.* TO 'root'@'你的本地IP' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;
6. 检查Unity Player设置
在Unity编辑器的Player Settings > Other Settings > Configuration中,将Internet Access设置为Require,确保构建后的程序拥有网络访问权限。
内容的提问来源于stack exchange,提问作者Torin
相关产品推荐
相关产品推荐

