提问者:小点点

如果包含时间,如何筛选日期


我只想通过选择日期在日期之间筛选。 我的数据库输入了具有不同时间值的日期记录。 但我只想过滤日期。

这是我的代码

<?php  
 //filter.php  
 if(isset($_POST["from_date"], $_POST["to_date"]))  
 {  
      $connect = mysqli_connect("localhost", "", "", "");  
      $output = '';  
      $query = "  

      SELECT 
      CreatedDate,
      COUNT(`Ticket`) AS Tickets,
       SUM(CASE WHEN status = 'Closed'  THEN 1 ELSE 0 END) as Closed 
      
      FROM Dashboarddetails

 
      WHERE CreatedDate BETWEEN '".$_POST["from_date"]."' AND '".$_POST["to_date"]."'
      GROUP BY CreatedDate
ORDER BY CreatedDate
";  

请找到图片,这是我得到当前代码的结果。


共1个答案

匿名用户

您可以使用DATE()函数
,并且应该避免在sql代码中使用php var来防止sqlinjection为此请看一看apt prepated语句E和为您的db驱动程序绑定param

根据实际情况,您使用的是msqli,而不是您可以使用的PDO

if(isset($_POST["from_date"], $_POST["to_date"]))  
 {  

    $connect = mysqli_connect("localhost", "", "", "");  
    $output = '';  
    $stmt = $connect->prepare("CreatedDate,
        COUNT(`Ticket`) AS Tickets,
        SUM(CASE WHEN status = 'Closed'  THEN 1 ELSE 0 END) as Closed 
        FROM Dashboarddetails"; 
        WHERE CreatedDate BETWEEN DATE(?) AND DATE(?)
        GROUP BY CreatedDate
        ORDER BY CreatedDate");
    $stmt->bind_param('ss',$_POST["from_date"], $_POST["to_date"]);
    $stmt->execute();

    $result = $stmt->get_result();
     while ($myrow = $result->fetch_assoc()) {
     ....
    }

   ..... 

无论如何,请确保您在POST中的日期是规范格式的日期提示,并且两个日期的date()部分是一个有效的日期范围(如果您传递的两个日期是同一天的,您的between子句不起作用)