数据库中的行重复

时间:2015-04-17 17:12:53

标签: php mysql

我们遇到一个问题,我们有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());
}

1 个答案:

答案 0 :(得分:2)

最好的方法是使用交易。

你需要阅读它们!

您基本上会尝试保留该表。该表将锁定。如果成功,则继续进行预约,然后解锁。

因此,无论谁先保留,只要处理完就会锁定该表。

编辑:有些评论提到一旦请求开始就阻止该表。这基本上是Ticketmaster为座位所做的事情,你需要花费足够的时间来完成或者座位被释放回可预留的桌子中。