我必须显示特定日期的记录。我尝试过的代码。我得到输出“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上创建了一个问题,但该查询对我不起作用。你能帮助我吗?
答案 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'