2017-06-25 35 views
0

設置可以具有多個可選過濾器的搜索。pdo準備了包含更改變量列表的語句

$sql = "SELECT * 
     FROM table 
     WHERE title = :title 
     AND filter1 = :filter1 
     AND filter2 = :filter2 
     AND filter3 = :filter3"; 
$query = $dbc->prepare($sql); 
$query->execute(
      array(
      ':title' => $title, 
      ':filter1' => $filter1, 
      ':filter2' => $filter2, 
      ':filter3' => $filter3 
      ) 
     ); 

此問題有時候過濾器變量將爲空。如果過濾器是空的,那麼任何值都可以工作。我曾嘗試將空濾鏡設置爲通配符(%),但似乎不起作用。

if(empty($filter1)) $filter1 = '%'; 
+0

在這種情況下,SQL QueryBuilder可能是一個不錯的選擇。 – DanielO

回答

1

您需要有條件地將它們添加到您的SQL和execute()中的SQLDATA中。

$filters = array(
    ':filter1': $filter1, 
    ':filter2': $filter2, 
    ':filter3': $filter3 
); 
$sql = "SELECT * FROM TABLE WHERE title = :title"; 
$sqldata = array(
    ':title' => $title 
); 
foreach ($filters as $key => $value) { 
    $sql .= " AND $key=$value"; 
    $sqldata[$key] => $value; 
} 
$query = $dbc->prepare($sql); 
$query->execute($sqldata); 
+0

非常感謝! – jppower175