3

予約システム用にデータベースとテーブルの構造が整っています。特定の車が特定の日付に利用可能かどうかを検索できるようにする必要があります。私のテーブル構造は次のとおりです。

car_table: (車の情報を格納)

ID     | car_make | car_name
1      | Ford     | Focus
2      | BMW      | Z3
3      | Audi     | A5

booking_table: (大部分の情報を保存します - 日付、ID など)

booking_ID  | start_date | end_date
125674      | 2013-02-27 | 2013-03-01    
887463      | 2013-03-05 | 2013-03-07     
209930      | 2013-03-16 | 2013-03-22  

reserved_table: (車を予約にリンクします)

ID     | booking_ID | car_ID
1      | 125674     | 2
2      | 887463     | 2
3      | 209930     | 1

PDO PHP では、重複した予約/日付を取得しないようにする必要があるため、利用可能な日付のみが予約可能として表示されるようにするための最良の検索クエリは何ですか。現時点で考えられるのは、顧客がリクエストした日付の予約を検索することだけです。結果が返された場合は、利用できないことを意味します。それ以外の場合は続行できます。

$query_params = array( 
   ':start_search' => $_POST['user_selected_startdate'],
    ':end_search' => $_POST['user_selected_enddate'],
);

$query = " 
    SELECT 
        *
    FROM 
        booking_table
    WHERE 
        start_date BETWEEN :start_search AND :end_search AND
        end_date BETWEEN :start_search AND :end_search 
"; 

try { 
    $stmt = DB::get()->prepare($query); 
    $stmt->execute($query_params); 

    $rows = $stmt->fetchAll();
}  
catch(PDOException $ex) { 
    die("Failed to run query: " . $ex->getMessage()); 
} 

if(!$rows) {
    // booking is available, continue and pay
}
else {
    // booking is unavailable, try again
}

これは、別のスロットで誰も予約しないようにするための最善の手順であり、より安全な方法ですか?

4

0 に答える 0