전달 된 필터 값을 기반으로 동적으로 SQL 문을 작성해야합니다. 이것은 조건문을 의미 할 가능성이 높지만 이것은 데이터베이스에서 쿼리를 최적화하기위한 최상의 방법입니다.
이 이런 식으로 뭔가를 (예 mysqli를 사용하지만,이 DB 라이브러리의 모든 종류의 준비된 문을 사용하는 유사해야합니다) 보일 수 있습니다 : 당신의 배열을 만들 수 있습니다 빠른/쉬운 방법으로
$query = 'SELECT * FROM table'; // or specifically specify the fields you need in result set.
if (empty($_GET['cat']) && empty($_GET['credits1']) && empty($_GET['credits2']) && empty($_GET['rev']) && empty($_GET['stars'])) {
// there are no search filters set so maybe you alert some sort of error
} else {
$query .= ' WHERE ';
$parameters = array();
$at_least_one_where_set = false;
if (!empty($_GET['cat'])) {
if($at_least_one_where_set === true) {
$query .= ' AND cat=?';
} else {
$query .= 'cat=?';
}
$at_least_one_where_set = true;
$parameters[]['value'] = $_GET['cat'];
$parameters[]['type'] = 's';
}
// do similar conditionals for each $_GET value you are interested in.
// query the database
$mysqli = new mysqli('host', 'user', 'password', 'database');
$stmt = $mysqli->stmt_init();
$stmt->prepare($query);
foreach ($parameters as $parameter) {
$stmt->bind_param($parameter['type'], $parameter['value']);
}
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// do something with your result row
}
}
defaults,'array_merge()'with $ _GET' –