Логика в корне неверна.
Данную выборку надо строить исходя из того какие поля введены, а не наоборот убирать "лишнее"
Как пример
$condition = array();
if ($username != "") {
$condition[] = " `username` = ' ". $username ."'";
}
if ($surname != "") {
$condition[] = " `surname` = ' ". $surname ."'";
}
И т.п.. Можно вообще сделать в виде списка полей, чтобы не копипастить...
А потом формируем сам запрос
$SQL = "SELECT * FROM `users`";
if (count($condition) > 0) {
$SQL .= " WHERE ".implode(" AND ", $condition);
}