我有一个包含大量游戏对象的数据库,以下 3 个 PHP 脚本正在查询这些对象。
- 列出对象:获取包含我需要的所有项目的 JSON 对象
- 添加对象:将对象添加到数据库中
- 重置:擦除桌子上的所有对象
他们三个都在某种程度上起作用。虽然,时间不匹配。当游戏调用重置函数时,它会重新启动。当游戏重新启动时,它会自动加载所有对象。不幸的是,这里的问题是,如果游戏刚刚被重置,对象仍然会被脚本 1 拉取。
我知道事务,但我从未使用过它们,也不知道如何在这里实现它们,因为我的事务涉及来自在不同时间运行的不同脚本的事物。
奖励积分:这个设置(AS3 > php > MySQL)会让我在繁重的负载中遇到麻烦吗?游戏可能会被 10、100、1000 人接受,关于这个主题我能读到什么吗?
编辑:新想法/问题
目前,擦除工作如下:对象表有一个字段“已删除”,当调用重置方法时,该字段设置为“1”。将现有数据复制到存档表中然后截断活动表可能更聪明......
编辑:这是我正在使用的(相关)PHP代码
添加对象:
if ($db_found) {
$x = $_GET['x'];
$y = $_GET['y'];
$type = $_GET['type'];
$name = $_GET['name'];
$text = $_GET['text'];
$SQL = "INSERT INTO bodies (x,y,type,name,text)
VALUES ('".$x."','".$y."','".$type."','".$name."','".$text."' )";
if (!mysql_query($SQL))
{
die('Error: ' . mysql_error());
}
};
mysql_close($db_handle);
列出/获取对象:
if ($db_found) {
$SQL = "SELECT * FROM bodies WHERE deleted = 0";
$res = mysql_query($SQL);
$rows = array();
while($r = mysql_fetch_assoc($res)) {
print $r['x'] . ','
. $r['y']
. ','
. $r['type']
. ','
. $r['name']
. ','
. $r['text']
. ';';
}
};
mysql_close($db_handle);
重置:(编辑 2)
mysql_query("LOCK TABLES bodies WRITE;");
$SQL = " DELETE FROM bodies";
if (!mysql_query($SQL))
{
die('Error: ' . mysql_error());
}
};
mysql_query("UNLOCK TABLES;");