我正在努力为我正在开展的项目建立一个简单的买卖网站(只有假装的钱)。
可以说,用户可以手上或虚拟银行存钱。当用户将钱存入他们用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 :(得分:0)
使用InnoDB实现交易完整性,您将得到您想要的东西。
就LIMIT 1
而言,设计你的表是非常明智的,因此通过使用主键来选择,不可能选择多行进行更新。