0

我正在将手机游戏的游戏状态保存在 MySql 数据库中。信息已成功保存,但它显示保存游戏状态时出错。我仍在适应 php,不知道这是从哪里来的。

PS 我知道 SQL 语句是不安全的。现在,我只是让基础知识启动并运行,因为语句和表格本身很快就会改变。

传入 json 的清单:

    } else if ($tag == 'save_game_state') {
    $email = $_POST['email'];
    $virtumon = $_POST['monster'];
    $qty = $_POST['qty'];
    $exp = $_POST['exp'];
    $user = $db->saveGameState($email, $monster, $qty, $exp);
        if ($user) {
            $response["success"] = 1;
            $response["The game state has been successfully saved"];
         echo json_encode($response);
        } else {
            // user failed to store
            $response["error"] = 1;
            $response["error_msg"] = "Error occured in saving the game state";
            echo json_encode($response);
        }

将信息输入数据库并返回成功/失败。

    public function saveGameState($email, $monster, $qty, $exp) {

    $result = mysql_query("INSERT INTO user_profiles(email, monster, qty, exp) VALUES('$email', '$monster', '$qty', '$exp')") or die(mysql_error());
    // TODO check for successful store
    $success = mysql_query("SELECT email, monster, qty, exp FROM user_profiles WHERE email = '$email' AND monster= '$monster' AND qty = '$qty' AND exp = '$exp'");
   if ($success) {
            return mysql_fetch_array($success);
    } else {
       return false;
   }
}
4

2 回答 2

3

绝对不应该SELECT在你INSERT检查它是否有效之后运行。只需检查$result运行后的内容。从

http://php.net/manual/en/function.mysql-query.php

对于其他类型的 SQL 语句,INSERT、UPDATE、DELETE、DROP 等,mysql_query() 在成功时返回 TRUE,在错误时返回 FALSE

尝试

$result = mysql_query("INSERT INTO user_profiles(email, monster, qty, exp) VALUES('$email', '$monster', '$qty', '$exp')") or die(mysql_error());
return $result;

如果要返回刚刚插入的内容,请在运行后调用另一个函数saveGameState。但是,如果您已经拥有这些值,则可以使用这些值而不是再次查询数据库。

您还应该研究PDO的使用。

于 2012-06-04T00:48:55.273 回答
1

您正在检查您的 select 语句是否成功。您应该检查插入是否成功。

if ($result = mysql_query(INSERT INTO user_profiles(email, monster, qty, exp) VALUES('$email', '$monster', '$qty', '$exp') or die(mysql_error())) {
    if ($success = mysql_query("SELECT email, monster, qty, exp FROM user_profiles WHERE email = '$email' AND monster= '$monster' AND qty = '$qty' AND exp = '$exp'") or die(mysql_error())) {
        if (mysql_num_rows($success) > 0) return mysql_fetch_assoc($success);
    }
}
else { return false; }
于 2012-06-04T00:50:02.987 回答