【问题标题】:PDO dynamic parameter binding where clause AND between datesPDO 动态参数绑定 where 子句 AND 日期之间
【发布时间】:2014-09-03 12:50:36
【问题描述】:

我有一个包含多个输入字段的搜索表单。其中 2 个输入字段是日期。如果用户填写 From/To 日期,则应显示从/到该日期的所有记录;如果用户给出 2 个日期,则应显示这 2 个日期之间的所有记录。

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

<?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(); ?>

【问题讨论】:

  • isn't select * from table where date between date1 and date2 your solution?
  • 不,我必须将日期变量与 $_POST 数组分开。请参阅下面的解决方案。

标签: php mysql date pdo


【解决方案1】:

我找到了解决办法。

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

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

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

【讨论】:

  • 太棒了。在 WHERE 子句中使用未确定数量的元素取消设置变量对我的 PDO SELECT 查询起到了作用。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多