Dlaczego tak
Zapytanie przygotowane z symbolem ? przesyła wartość parametru oddzielnie od treści SQL, więc dane od użytkownika nie mogą zmienić struktury zapytania – to ochrona przed SQL injection. W pozostałych fragmentach wartość z $_GET jest wklejana bezpośrednio do tekstu zapytania. Dotyczy to także wariantu z prepare(): przygotowanie zapytania z już doklejoną wartością nie daje żadnej ochrony.