2011-12-09 33 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而言,设计表格确实非常明智,因此通过使用主键进行选择不可能选择多个行进行更新。