您好我想知道如何将以下代码转换为使用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);
答案 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)