使用MySQL,PHP和PDO在datetimepicker输入上从数据库中过滤数据

时间:2018-09-17 01:06:31

标签: php mysql pdo

我试图基于两个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>
    ';
}
?>

1 个答案:

答案 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 ...