2014-05-12 56 views
0

基本上我正在做一個簡單的婚禮策劃,我想檢查用戶插入的日期是否可用或場地是否預訂。基本上,它正在垮掉我的SQL查詢。起初我設置的時間:PHP檢查數據庫日期字段與PHP日期

$time = mktime(0, 0, 0, $month, $day, $year); 

然後,我有我在哪裏檢查它針對先前所設定的ID變量,即通過的日期SQL查詢。

$sql2 = "SELECT * FROM venue_booking WHERE date_booked = ".$time." AND venue_id =".$id; 

在這種情況下,在數據庫中的日期爲2015年1月1日,我通過日期是2015年1月1日,我在if語句,如果行的量返回選中此從數據庫中大於0然後回顯預訂,否則回顯可用。

即使輸出的意思是說預訂,它仍然表示可用。是否有問題與我檢查時間對MySQL的日期的方式。

date_booked - This is a MySQL date (2014-01-01) 

有人有什麼想法嗎?

+0

你是什麼領域date_booked的數據類型。它看起來你的數據庫數據類型是日期時間,但你傳遞整數。 –

回答

2

您當前的查詢在日期字符串周圍缺少引號,因此它不會按原樣運行。

但是,爲了回答你的問題,只是通過在YYYY-MM-DD格式的有效日期字符串和您的查詢將工作:

$date = $_POST['date']; 
// Put date validation code here. I.e. make sure it is in YYYY-MM-DD 
// format, etc. Might as well escape it, too since you aren't using 
// prepared statements. 
$sql2 = "SELECT * FROM venue_booking WHERE date_booked = '".$date."' AND venue_id =".$id; 

我還要提到的是,你或許應該切換到使用準備好的語句它將使查詢中用戶提供的數據更安全。

以下是可能有用的example of date validation。如果您需要將日期從一種格式轉換爲另一種格式,this will show you how

0

mktime()返回一個PHP時間戳,它是一個unix時間戳,它是「自紀元以來的秒數」,又名Jan 1/1970。你不能直接與mysql日期字段進行比較。你會從字面上做

WHERE '2014-01-01' = 12345678 

嘗試

$ts = date('Y-m-d h:i:s', mktime(0,0,0,$month, $day, $year)); 

$sql = "SELECT ... date_booked = '$ts'";