【发布时间】:2012-01-13 22:42:36
【问题描述】:
我目前正在开发一个拍卖网站,作为投资组合项目的一部分,我遇到了一个似乎无法解决的有趣问题。
目前我正在检查当前的最高出价(查询 1),然后如果出价高于当前存储的出价,那么我将新的出价插入数据库(查询 2)。相当基本的逻辑,显然如果出价较低,那么最终会通知用户。
Query 1:
$result = mysql_query("SELECT * FROM bids WHERE item_id = '".$_POST['id']."' ORDER BY bids.amount DESC LIMIT 1");
Query 2:
$query = sprintf("INSERT INTO bids(item_id,buyer_id,amount,created) VALUES('%s','%s','%s',NOW())",
mysql_real_escape_string($item_id),
mysql_real_escape_string($user_id),
mysql_real_escape_string($amount));
注意:我知道此代码存在重大安全问题,但这只是一个示例...
但是,我不确定是否会出现在检查价格和插入数据库之间的间隙,另一个查询实际上会更快,插入数据库然后破坏当前的投标逻辑。
使用带有 mysqli 或 PDO 驱动程序的事务是否足以确保投标正确排队?
MySQL 是否提供了对 mysql 查询进行排队的方法以确保不会发生这种情况?
【问题讨论】:
标签: php mysql transactions