2012-06-04 55 views
0

我正在從MySql數據庫上的手機遊戲中保存遊戲狀態。這些信息已成功保存,但這反映了保存遊戲狀態時出現錯誤。我仍然在調整php,不確定這是從哪裏來的。功能返回假陰性

PS我知道SQL語句是不安全的。現在我只是把基礎知識運行起來,因爲陳述和表格本身很快就會改變。

Listining傳入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; 
    } 
} 
+1

@ DanielA.White請閱讀整個POST「PS我知道SQL語句是不安全的。現在,我剛開基本面和運行作爲自己很快就會改變報表和表格。」 !! ! – KDEx

+0

@ DanielA.White:KDEx提到他已經知道...... – teynon

回答

3

INSERT後絕對不應該運行SELECT檢查,看看它是否工作。只需在運行後檢查一下$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; 

如果您想要返回剛纔插入的內容,請在運行後調用另一個函數0。但是,如果你已經有了值,你可以直接使用這些值而不是再次查詢數據庫。

您還應該考慮使用PDO

+0

是的,這可能是一個更好的主意。他們也可以使用'return mysql_affected_rows()> 0;'。 –

+0

@aldo,因爲他正在執行'INSERT',所以甚至不需要。當原始'mysql_query'的返回告訴他它是否成功時,你只需要調用另一個函數。 –

+0

這解決了它,謝謝你的參考。 – KDEx

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