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



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

// 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不在这个范围内,它将不返回任何东西。

例如,起始日期为07-09-2015,结束日期为08-12-2015。应该在9月、10月、11月和12月…)显示。问题是……有了这两个参数,我如何才能在每个月/年显示事件?谢谢!

您正在比较日期列和字符串文字,迫使数据库隐式地将其中一个转换为另一个。显然,日期被转换为字符串,比较是按字典顺序进行的。相反,您应该显式地将字符串转换为日期,以便通过日期值进行比较:

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注入攻击。您应该考虑使用预处理语句。

相关内容

  • 没有找到相关文章

最新更新