确保用户从mysql语句中获取正确的信息?

时间:2011-12-09 14:04:31

标签: mysql transactions

我正在努力为我正在开展的项目建立一个简单的买卖网站(只有假装的钱)。

可以说,用户可以手上或虚拟银行存钱。当用户将钱存入他们用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吗?

1 个答案:

答案 0 :(得分:0)

使用InnoDB实现交易完整性,您将得到您想要的东西。

LIMIT 1而言,设计你的表是非常明智的,因此通过使用主键来选择,不可能选择多行进行更新。