我们遇到一个问题,我们有5张餐桌可供预订。我们遇到的问题是这些表非常受欢迎,希望预订这些表的用户都尝试同时预订,偶尔会分配两次相同的表。什么是阻止这种情况发生的最佳方法(全面防范)?
代码在
之下$date="2015-05-01 19:00";
// LIST OF DINNER TABLES
$fcas = array('Table 1','Table 2','Table 3','Table 4','Table 5');}
// FIND AVAILABLE DINNER TABLE
$sql = "SELECT * FROM bookings WHERE date_time='$ed' and table_assigned IN ('" . implode("','", $fcas) . "'))";
$rs = mysql_query($sql);
if (!$rs) {
// Handle query errors here
}
$rows = array();
while ($row = mysql_fetch_array($rs)) {
$rows[$row['table_assigned']] = $row;
}
foreach ($fcas as $fca) {
if (!isset($rows[$fca])) {
break;
}
}
// INSERT RECORD
$sql_insert = "INSERT INTO bookings (date_time, table_assigned) VALUES ('".mysql_real_escape_string($date)."', '".mysql_real_escape_string($fca)."')";
if (!mysql_query($sql_insert)) {
die('Error: ' . mysql_error());
}
答案 0 :(得分:2)
最好的方法是使用交易。
你需要阅读它们!
您基本上会尝试保留该表。该表将锁定。如果成功,则继续进行预约,然后解锁。
因此,无论谁先保留,只要处理完就会锁定该表。
编辑:有些评论提到一旦请求开始就阻止该表。这基本上是Ticketmaster为座位所做的事情,你需要花费足够的时间来完成或者座位被释放回可预留的桌子中。