2014-05-12 50 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'";