MYSQL:保存各种玩家实例


MYSQL: Saving various instances of players

我为多人游戏托管多个服务器,我需要一些帮助来创建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,我需要尽快完成。

感谢您的任何帮助。

使 GUID 成为主唯一键。

然后,不要只插入行,而是先检查数据库中是否存在该 guid,如果存在,则更新行。如果没有,则可以插入它。

你可以为此拍摄:

$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();
}

注意:

  • 我正在使用mysqli功能,因为mysql函数已被弃用。您也可以使用 PDO。