2014-12-08 3 views
0

Я размещаю несколько серверов для многопользовательских игр, и мне нужна помощь в создании PHP-скрипта MySQL. Я создал скрипты для игровых серверов, которые выводят несколько переменных в php-скрипт. Эти переменные включают имя игрока, номер GUID (идентификатор пользователя игры) и пару других несущественных вещей. Они отправляются в php-скрипт каждый раз, когда игрок присоединяется к серверу.MYSQL: Сохранение различных экземпляров игроков

В любом случае, что мне в основном нужно, это каждый раз, когда игрок присоединяется к серверу, он сохраняет имя игрока, определяет и присоединяет дату/временную метку к строке в таблице 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

Просто FYI, GUID имеет определенное значение в РСУБД, что некоторые могут найти смущение. – Strawberry

+0

Ah хорошо, ну в этом случае для всех, кто задается вопросом, что GUID - это всего лишь 5-значный или более уникальный идентификатор. – Wolfgang

+0

Итак, просто см. INSERT ... ON DUPLICATE KEY UPDATE Синтаксис – Strawberry

ответ

0

Сделать GUID основным уникальным ключом.

Затем вместо того, чтобы просто вставлять строку, проверьте, существует ли это guid в базе данных, а затем, если это произойдет, обновите строку. Если это не так, вы можете вставить его.

+1

Это не должно быть ПЕРВИЧНО. – Strawberry

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.
+0

Это сложное решение – Strawberry

Смежные вопросы