如何在php中显示特定日期的记录?

时间:2016-10-05 06:45:15

标签: php mysql database mysqli

我必须显示特定日期的记录。我尝试过的代码。我得到输出“0结果”;

   $startDate=$_POST['startDate'];//date in format(d-m-y)
       $endDate=$_POST['endDate'];//date in format(d-m-y)

     include("../db/connection.php") ;

     $sql ="SELECT *FROM Emp WHERE empDate BETWEEN $startDate AND $endDate";
$result = $conn->query($sql);

 if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["Id"]. " - Name: " . $row["First_name"]. " " . $row["Last_name"]. "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
}

我的数据库中有这样的记录

2016-10-03 2:51:35
2016-10-03 2:53:25
2016-10-04 3:52:30
2016-10-04 4:15:55

我在stackoverflow get values from table only for a specific day in mysql上创建了一个问题,但该查询对我不起作用。你能帮助我吗?

2 个答案:

答案 0 :(得分:1)

首先,您必须使用strtotime()将日期格式更改为“Y-M-D”:

<?php
$startDate = date("Y-m-d H:i:s",strtotime($_POST['startDate'])); // will return data something like 2016-10-05 00:00:00
$endDate = date("Y-m-d H:i:s",strtotime($_POST['endDate'])); // will return data something like 2016-10-05 00:00:00
?>

您需要在SQL语句的Date值周围使用单引号:

$sql ="SELECT * FROM Emp WHERE empDate BETWEEN '$startDate' AND '$endDate'";

根据您的问题,您的日期值为:

2016-10-03 2:51:35
2016-10-03 2:53:25
2016-10-04 3:52:30
2016-10-04 4:15:55

在您的数据库中,您必须使用“Y-M-D”格式的DATE。

另请注意,您的代码是针对SQL注入打开的,您必须使用SQL注入来防止您的代码,此引用将帮助您:How can I prevent SQL injection in PHP?

<强>更新

在您的情况下,如果您未从H:i:s输入获得$_POST,那么您可以使用<{p}}

<?php
$startDate = date("Y-m-d",strtotime($_POST['startDate']));
$endDate = date("Y-m-d",strtotime($_POST['endDate']));
$sql ="SELECT * FROM Emp 
    WHERE empDate 
    BETWEEN '$startDate 00:00:00' AND '$endDate 23:59:59'";
?>

答案 1 :(得分:0)

将日期转换为标准格式并执行查询

$startDate=Date('Y-m-d',strtotime($startDate));
$endDate=Date('Y-m-d',strtotime($endDate));

尝试此查询后

SELECT *FROM Emp WHERE DATE(empDate) BETWEEN '$startDate' AND '$endDate'