2011-12-09 38 views
0

我正在嘗試爲我正在開發的一個項目構建一個簡單的購買和銷售網站(僅用於裝扮錢)。確保用戶從mysql語句中獲取正確的信息?

用戶可以在他們的手中或他們的虛擬銀行中有錢,可以這麼說。我使用這個交易,當用戶從他們手中將錢存入他們的賬戶包裹在一個PHP if語句:

if ($_POST['deposit'] > 0 && $_POST['deposit'] <= $user['money']) { 
    $dbc -> beginTransaction(); 
    $dbc -> query("SELECT id FROM items WHERE id = " . $user['id'] . " FOR UPDATE LIMIT 1"); 
    $q = $dbc -> prepare("UPDATE items SET money = money-?, bank = bank+?"); 
    $q -> execute(array($_POST['deposit'], $_POST['deposit'])); 
    $dbc -> commit(); 
} 

其他賬戶還可以查看用戶的信息,如他們的資金量。如果一個賬戶正在查看用戶的數據,就像他將錢存入他的賬戶一樣,上述查詢是否能確保他們從mySQL獲得正確的一致數據?

我通過使用從帳戶獲取所有信息;

$dbc -> query("SELECT * FROM items WHERE id = " . $account['id'] . "); 

如果賬戶訪問用戶的數據,就像他存錢,將MySQL查詢等待新更新的行?我想確保我的所有查詢在我的項目中保持一致

在SELECT FOR UPDATE查詢中使用LIMIT 1也可以嗎?

回答

0

使用InnoDB來實現事務完整性,你會得到你想要的。

LIMIT 1而言,設計表格確實非常明智,因此通過使用主鍵進行選擇不可能選擇多個行進行更新。