Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php pdo准备的带有可变列表的语句_Php_Mysql_Pdo - Fatal编程技术网

Php pdo准备的带有可变列表的语句

Php pdo准备的带有可变列表的语句,php,mysql,pdo,Php,Mysql,Pdo,设置可以有多个可选筛选器的搜索 $sql = "SELECT * FROM table WHERE title = :title AND filter1 = :filter1 AND filter2 = :filter2 AND filter3 = :filter3"; $query = $dbc->prepare($sql); $query->execute( array(

设置可以有多个可选筛选器的搜索

$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 = '%';

您需要在execute()中将它们有条件地添加到SQL和SQLDATA中


在这种情况下,SQL QueryBuilder可能是一个不错的选择。
$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);