我试图基于两个datetimepicker中的输入进行搜索,并将结果显示到表中,但是当我选择特定日期范围时,所有数据都会显示。我正在使用MySQL和PDO。
这是我的代码。
<?php
$date1 = date("Y-m-d", strtotime($_POST['date1']));
$date2 = date("Y-m-d", strtotime($_POST['date2']));
$db = new PDO('mysql:host=localhost;dbname=db_search;charset=utf8mb4',
'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$sql = "select * from book";
$stmt = $db->prepare($sql);
$stmt->execute();
$row_count = $stmt->rowCount();
if($row_count > 0){
while($row=$stmt->fetch(PDO::FETCH_ASSOC)) {
?>
<tr>
<td><?php echo $row['ISBN']?></td>
<td><?php echo $row['title']?></td>
<td><?php echo $row['author']?></td>
<td><?php echo date("m/d/Y", strtotime($row['date_published']))?></td>
</tr>
<?php
}
}else{
echo '
<tr>
<td colspan = "4"><center>Record Not Found</center></td>
</tr>
';
}
?>
答案 0 :(得分:1)
您实际上没有在查询中包括日期条件,这就是为什么它仍返回所有数据的原因。将查询更改为
$sql = "select * from book where date_published between '" . min($date1, $date2) . "' and '" . max($date1, $date2) . "'";
如果您知道$date1
小于$date2
,则可以简化为
$sql = "select * from book where date_published between '$date1' and '$date2'";
请注意,您的代码对SQL注入很开放,因此您实际上应该使用准备好的语句。有关更多信息,请参见this question ...