2017-06-25 28 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