如何在Godot中通过GDScript访问在线数据库?
可以通过Godot的HTTP请求配合后端接口实现在线数据库访问
直接让Godot连接在线数据库(比如MySQL)并不推荐——会暴露数据库凭证,极易被恶意攻击篡改数据。正确的做法是搭建一个后端接口层,Godot通过HTTP请求与接口通信,由接口负责和数据库交互。
具体实现步骤
1. 搭建后端接口
你提到的phpMyAdmin是MySQL的管理工具,并非后端服务。你可以用PHP、Node.js、Python等语言写简单的接口,处理用户数据的增、删、改、查请求,返回JSON格式的响应。
举个简单的PHP接口示例(假设用MySQL数据库):
<?php // 数据库连接信息 $host = "你的数据库地址"; $dbname = "数据库名"; $username = "数据库用户名"; $password = "数据库密码"; // 建立连接 $conn = new mysqli($host, $username, $password, $dbname); if ($conn->connect_error) { die(json_encode(["status" => "error", "message" => "数据库连接失败"])); } // 处理获取用户数据的请求 if ($_SERVER["REQUEST_METHOD"] === "GET") { $userId = $_GET["user_id"]; // 防SQL注入,使用预处理语句 $stmt = $conn->prepare("SELECT * FROM users WHERE id = ?"); $stmt->bind_param("i", $userId); $stmt->execute(); $result = $stmt->get_result(); $user = $result->fetch_assoc(); echo json_encode(["status" => "success", "data" => $user]); $stmt->close(); } // 处理保存用户数据的请求 if ($_SERVER["REQUEST_METHOD"] === "POST") { $userData = json_decode(file_get_contents("php://input"), true); $userId = $userData["id"]; $username = $userData["username"]; $score = $userData["score"]; $stmt = $conn->prepare("REPLACE INTO users (id, username, score) VALUES (?, ?, ?)"); $stmt->bind_param("isi", $userId, $username, $score); $stmt->execute(); echo json_encode(["status" => "success", "message" => "数据保存成功"]); $stmt->close(); } $conn->close(); ?>
2. Godot端的GDScript实现
在Godot中使用HTTPRequest节点发送请求,处理后端返回的JSON数据:
获取用户数据示例
extends Node var http_request: HTTPRequest func _ready(): http_request = HTTPRequest.new() add_child(http_request) http_request.connect("request_completed", self, "_on_request_completed") # 发送GET请求获取用户数据 var url = "https://你的后端域名/get_user.php?user_id=123" var error = http_request.request(url) if error != OK: print("请求发送失败: ", error) func _on_request_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray): if response_code == 200: var response_text = body.get_string_from_utf8() var data = JSON.parse_string(response_text) if data["status"] == "success": print("用户数据: ", data["data"]) else: print("请求错误: ", data["message"]) else: print("请求失败,状态码: ", response_code)
保存用户数据示例
func save_user_data(user_id: int, username: String, score: int): var url = "https://你的后端域名/save_user.php" var user_data = { "id": user_id, "username": username, "score": score } var json_body = JSON.stringify(user_data) var headers = ["Content-Type: application/json"] var error = http_request.request(url, headers, true, HTTPClient.METHOD_POST, json_body) if error != OK: print("保存请求发送失败: ", error)
关键注意事项
- 安全优先:必须使用HTTPS传输数据,避免明文泄露;后端接口要做参数验证、防SQL注入(用预处理语句),还要对用户请求做身份校验(比如用Token)。
- 异步处理:Godot的HTTP请求是异步的,务必通过
request_completed信号处理响应,不要阻塞主线程。 - 错误处理:要处理请求失败、响应码异常、JSON解析失败等情况,保证程序健壮性。
内容的提问来源于stack exchange,提问作者Ben Jarvis
相关产品推荐
相关产品推荐

