$sql ="SELECT * FROM orders WHERE order_date >= '$fromdate' AND order_date <= '$todate'";
如您在上面的查询中看到的,它指示所需的起始日期。只是典型的表格过滤。
如您所见。
从日期开始的值为10/29/2018,并回显2018-10-29。
TO日期值为10/30/2018,并回显2018-10-30。 因为我用这种方式格式化了输入日期。
所以问题是这样的。 我有数据库中的这些值:
2018-10-30 01:21:29 pm
2018-10-29 01:21:29 pm
如您所见,它指示时间。 因此,即使输入日期中只有日期,我也想扫描所有这些值。
答案 0 :(得分:1)
在Mysql中使用Date()
函数
$sql ="SELECT * FROM orders WHERE Date(order_date) >= '$fromdate' AND Date(order_date) <= '$todate'";
比较时将删除时间。还有Year
,Day
,Month
等。。。使用DateTime字段而不是VarChar的优点
作为奖励,转换日期样式的简便方法就是这样
$date = (new DateTime('10/29/2018'))->format('Y-m-d');
请注意(new DateTime)
括号,然后不要在其上浪费局部变量。我忘了他们在5.5中添加了哪个版本的PHP,我认为它应该可以在任何“当前版本”中工作
最后,您应该查看准备好的语句,而不是连接最终用户的变量。否则,您将用SQLInjection棒打Git。对于此查询,如果您使用日期时间之类的格式来格式化日期,则它可能会解决大多数问题,但这不是保护SQL的正确方法。