PDO如何检查输入是否为空而不使用WHERE

时间:2015-07-31 21:50:53

标签: php mysql pdo

您好我想知道如何将以下代码转换为使用BindValues并执行相同的工作。

$sql = "SELECT * FROM documents WHERE 1";
if (!empty($topic)) {
    $sql .= " AND topic = '$topic' ";   
}
if (!empty($date )) {
    $sql .= " AND date LIKE '%$date%' "; 
}

WHERE子句仅适用于填充的输入 所以我的问题是如何将此代码转换为以下查询

$sql = new page($pages "SELECT * 
                        FROM table 
                        WHERE topic LIKE :topic 
                           OR date LIKE :date ", $option);

$sql ->BindValue(':topic ', $_POST['topic '], PDO::PARAM_STR);
$sql ->BindValue(':date ', $_POST['date  '], PDO::PARAM_STR);

2 个答案:

答案 0 :(得分:2)

有多种方法可以做到这一点,但一种方法是继续使用你已经用来添加可选条件的相同逻辑,然后再次使用它来选择性地绑定值。

$sql = "SELECT * FROM documents WHERE 1";

// add the conditions with the placeholders
if (!empty($topic)) { $sql .= " AND topic LIKE :topic"; }
if (!empty($date))  { $sql .= " AND date LIKE :date"; }

// bind the values
if (!empty($topic)) { $sql ->BindValue(':topic', '%'.$_POST['topic'].'%', PDO::PARAM_STR); }
if (!empty($date))  { $sql ->BindValue(':date', '%'.$_POST['date'].'%', PDO::PARAM_STR); }

答案 1 :(得分:0)

SELECT * FROM table 
WHERE (:topic is null or topic LIKE :topic)
  AND (:date is null or date LIKE :date)