【发布时间】:2015-04-17 17:12:53
【问题描述】:
我们遇到了一个问题,我们有 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());
}
【问题讨论】:
-
这是一种非常可怕的访问数据库的方式。
-
mysql_*函数已弃用。您应该转到mysqli_*,或者更好的是,使用 PDO 与您的数据库进行通信。 -
一旦有人开始预订,您应该在 x 时间内阻止/预订一张桌子。如果在一定时间内未完成/确认预订,则再次释放它。
-
嗨,Jeroen,这就是我们所做的,但由于它们都是同时添加的,因此可能会导致重复问题。
-
不,在访客打开预订页面的那一刻,您应该已经通过阻止表来检查和更新您的可用性。那么就不能有重复了。