如何使用DATEDIFF选择行?

时间:2012-09-06 01:17:20

标签: php mysql sql

我正在使用this calendar插件使用mySQL数据库显示我的客户端日程。  日历使用startend 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日是{{1} 9月份。

我没有看到任何错误......请帮忙!我正在撕扯我的头发!

2 个答案:

答案 0 :(得分:1)

不要将single quotes用于列名,而是使用backticks。试试这个

SELECT * FROM all_events WHERE DATEDIFF(`start`, '$start') > 0

答案 1 :(得分:1)

我建议使用FROM_UNIXTIME和准备好的语句:

$stmt = $mysqli->prepare("SELECT * FROM all_events WHERE DATEDIFF(FROM_UNIXTIME(?), start) > 0"); 
$stmt->bind_param($_GET['start']);

mysql_函数正在deprecated