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);