我为多人游戏托管多个服务器,我需要一些帮助来创建PHP MySQL脚本。 我为游戏服务器制作了脚本,将一些变量输出到php脚本。这些变量包括玩家名称,GUID号码(游戏用户ID)和其他几个不重要的东西。每次玩家加入服务器时,都会将这些内容发送到php脚本。
无论如何,我基本上需要它做的是每次玩家加入服务器时它会保存玩家名称,guid并将日期/时间戳加入MySQL表中的一行。播放器将始终只有一个GUID代码,这有点像他们的CD密钥。我目前所拥有的:
if ( $action == "save")
{
$name = mysql_real_escape_string($_GET['name']);
$guid = mysql_real_escape_string($_GET['guid']);
}
mysql_query("INSERT INTO `players` (`name`, `guid`) VALUES ('$name', '$guid') ON DUPLICATE KEY UPDATE `last_joined`=CURRENT_TIMESTAMP")or die(mysql_error());
echo "-10";
die();
现在,这很好用。但我需要它做的是;如果播放器以不同的名称进入服务器,它会将该实例记录到一个新行中,如果它们再次以相同的名称出现,它将使用当前时间戳更新同一行。例如,如果他们将名称更改回他们使用的名字,则会更新具有使用当前时间戳记录的名称的行。
我唯一尝试的就是制作这个名字'列,主键和重复条目,它将更新它。但是,如果我这样做并且另一名玩家使用相同名称进入服务器,则只会更新最后一名玩家的数据。
因此需要记录玩家使用的每个用户名。
这可能是一个非常简单的解决方案,但我从来没有时间学习MySQL,我很快就需要这样做。
感谢您的帮助。
答案 0 :(得分:0)
使GUID成为主要唯一密钥。
然后,不是直接插入行,而是首先检查数据库中是否存在guid,然后检查是否存在,更新行。如果它没有,那么你可以插入它。
答案 1 :(得分:0)
你可以为此拍摄:
$guid = mysqli_real_escape_string($conn, $_GET["guid"]);
$name = mysqli_real_escape_string($conn, $_GET["name"]);
if (!empty($guid) && !empty($name)) {
//Check if the user exists
$sql = "SELECT COUNT(*) AS cnt FROM players WHERE guid = " . $guid;
$res = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($res);
if ($row['cnt']) {
//If yes, update
$sql = "UPDATE players SET `last_joined` = NOW()
WHERE `guid` = " . $guid;
} else {
//If no, insert
$sql = "INSERT INTO players (`guid`, `name`, `last_joined`)
VALUES (" . $guid . ", '" . $name . "', NOW())";
}
mysqli_query($conn, $sql);
echo "-10";
die();
} else {
echo 'Missing parameter';
die();
}
注意: