2014-09-03 37 views
0

我有一个带有几个输入字段的搜索表单。这些输入字段中的2个是日期。如果用户填写自/到日期,则应显示该日期的所有记录;如果用户提供2个日期,则应显示这2个日期之间的所有记录。PDO动态参数绑定where子句AND日期间

这是我对其他输入字段的工作代码,但我不知道如何实现日期约束。参数绑定应该保持动态,因为我们不知道用户将搜索多少个变量。

<?php $this->databaseConnection(); 

$sql = 'SELECT * FROM trips t'; 
$searchTerms = array_filter($_GET); 
$whereClause = array(); 

foreach($searchTerms as $key=>$value) 
{ 
    //Push values to array 
    array_push($whereClause, "t." . $key . "=:" . $key); 
} 

if(!empty($whereClause)) 
{  
    $sql .= " WHERE " . implode(" AND ", $whereClause); 
} 

    if($this->databaseConnection()) { 

    $query_search_data = $this->db_connection->prepare($sql);  
    foreach($searchTerms as $key=>$value) 
    { 
     $query_search_data->bindValue(':' . $key, $value); 
    } 

    $query_search_data->execute(); 
    $result = $query_search_data->fetchAll(); ?> 
+0

是不是从表中选择* date1到date2之间的日期是您的解决方案? – VeNoMiS 2014-09-03 15:56:10

+0

不,我不得不从$ _POST数组中分离日期变量。见下面的解决方案。 – user3253002 2014-09-03 21:55:09

回答

1

我找到了解决方案。

取消设置日期变量(例如unset($searchTerms['fromDate'], $searchTerms['toDate']);)并在查询结尾处再次添加它们。

if (isset($_GET['fromDate']) && !empty($_GET['fromDate'])) { 
    $sql .= " AND Date >=:from_date"; 
} 

希望这可以帮助其他人动态参数绑定问题。

+0

太棒了。取消设置变量对我的PDO SELECT查询使用了WHERE子句中未确定数量的元素。谢谢! – Webomatik 2017-12-13 01:17:33