我使用这个日历插件来使用mySQL数据库显示我的客户的议程。日历用start
和end
UNIX时间戳向我的脚本发布一个请求,如下所示:
/getevents.php?start=1262332800&end=1265011200&_=1263178646
//That last piece of data is to prevent caching.. apparently
在我的脚本中,我将UNIX时间戳转换为mySQL datetime
对象,如下所示:
$start = $_GET['start'];
$end = $_GET['end'];
$start = gmdate("Y-m-d H:i:s", $start);
$end = gmdate("Y-m-d H:i:s", $end);
printf($start.".....".$end);
这正确地打印了如下内容(当我导航到2012年9月时):
2012-08-26 04:00:00.....2012-10-07 04:00:00
现在,我想从数据库中选择这些日期之间的所有事件。我的数据库只有1行,start
字段是今天的日期:
id start end
10 2012-09-05 20:27:00 0000-00-00 00:00:00
但是对于下面的SQL语句,我没有得到结果。我尝试过将>
反转为<
,但仍然一无所获。我没有任何错误,只是没有结果。
$sql = "SELECT * FROM all_events WHERE DATEDIFF('$start', 'start') > 0";
$result = mysql_query($sql, $link) or die(mysql_error());
echo "Rows:".mysql_num_rows($result);
正如您所看到的,现在我只是检查事件的start
是否大于日历日期范围的start
。。即8月26日是9月份的start
。
我没觉得有什么不对。。。请帮忙!我要把头发扯掉了!
不要使用single quotes
作为列名,而是使用backticks
。试试这个
SELECT * FROM all_events WHERE DATEDIFF(`start`, '$start') > 0
我建议使用FROM_UNIXTIME
和准备好的语句,如:
$stmt = $mysqli->prepare("SELECT * FROM all_events WHERE DATEDIFF(FROM_UNIXTIME(?), start) > 0");
$stmt->bind_param($_GET['start']);
mysql_
函数正在被弃用