MYSQL:保存各种玩家实例

时间:2014-12-08 13:44:03

标签: php mysql

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

感谢您的帮助。

2 个答案:

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

注意:

  • 我正在使用mysqli fucntions,因为不推荐使用mysql函数。您也可以使用PDO。