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

DBに情報を入力し、成功/失敗を返します。

    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 に答える