Создайте предложение WHERE
динамически. Мой рекомендуемый подход состоит в том, чтобы подтолкнуть каждое условие к массиву, а затем использовать implode()
, чтобы объединить все условия, соединяя их с AND
или OR
в соответствии с вашими предпочтениями.
$wheres = array();
$params = array();
if (!empty($_GET['id'])) {
$wheres[] = 'a.uid = :uid';
$params[':uid'] = $_GET['id'];
}
if (!empty($_GET['major'])) {
$wheres[] = 'a.major = :major';
$params[':major'] = $_GET['major'];
}
if (!empty($_GET['name'])) {
$wheres[] = 'b.name LIKE :name';
$params[':name'] = '%'.$_GET['name'].'%';
}
// And so on for all parameters
$sql = "SELECT *
FROM user_details AS a
JOIN user AS b ON a.uid = b.id";
if (!empty($wheres)) {
$sql .= " WHERE " . implode(' AND ', $wheres);
}
$stmt = $db->prepare($sql);
$stmt->execute($params);
Затем отображать результаты как в вашем исходном коде.
while ($student = $stmt->fetch()) {
...
}