如何从MySql获得开始和结束日期的结果?

时间:2015-10-02 17:33:59

标签: php mysql calendar fullcalendar

我在日历背面有以下代码:

// I get this from ajax (start month + end of the month)
$post_date_start = $_POST['date_start']; // start month (always), ie: 2015-09-01
$post_date_ending = $_POST['date_ending']; // end month (always), ie: 2015-09-31

// If I get an event which its duration its between $post_date_start and $post_date ending it works properly as you can see:
SELECT * FROM calendar WHERE start_date >= '$post_date_start' AND ending_date <= '$post_date_ending' 

问题:它实际上会在'这些范围内正确返回结果。但是,如果start_dateending_date不在此范围内,则不会返回任何内容。

例如,活动于2015年9月7日开始,2015年12月8日结束。它应该显示在九月,十月,十一月和十二月......)。问题是......拥有这两个参数,我该如何在每个月/每年显示事件?谢谢!

1 个答案:

答案 0 :(得分:0)

您正在将日期列与字符串文字进行比较,从而强制数据库隐式地将其转换为另一个。显然,日期正在转换为字符串,并且按字典顺序进行比较。相反,您应该将字符串显式转换为日期,因此比较由日期值完成:

SELECT *
FROM   calendar 
WHERE  start_date  >= STR_TO_DATE('$post_date_start', '%Y-%m-%d') AND  
       ending_date <= STR_TO_DATE('$post_date_ending', '%Y-%m-%d')

强制性评论:
在SQL语句中使用字符串替换是一个坏主意,使您的应用程序容易受到SQL注入攻击。您应该考虑使用prepared statement代替。