W Nowym kodzie PHP fragment, nadal jesteś podatny na zastrzyki.
Używasz przygotowanego oświadczenia we wstawce, ale w rzeczywistości nie używasz prawidłowo mocy preparatów.
Tworząc przygotowane zestawienie, tworzysz zapytanie, w którym zamiast nieprzetworzonych wartości dodajesz symbole zastępcze:
$stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");
Znaki zapytania są symbolami zastępczymi i są później zastępowane za pomocą bind_param metoda:
$stmt->bind_param('ss', $email, $pw);
ss część wywołania bind informuje bazę danych mysql, że jej dwa ciągi, które są przekazywane do bazy danych (s dla string , ja dla int itp).
Wiążesz parametr ($name ), ale nie zawiera symbolu zastępczego ani żadnego rodzaju odwołania w zapytaniu..?
Z drugiej strony, Twoja instrukcja select jest nadal niebezpieczna i podatna na luki.
Prawdopodobnie użyłbym w tym celu przygotowanej instrukcji, podobnie jak w przypadku części insert.
Zawsze chcesz mieć pewność, że dane wejściowe od użytkownika są „bezpieczne” dla bazy danych, jeśli połączysz ciąg zapytania i dodasz do niego dane wejściowe użytkownika, baza danych nie zmieni ciągów, po prostu je uruchomi.
Używaj tylko standardowego query wywołuje metody, gdy samodzielnie piszesz pełne zapytanie, bez żadnych parametrów wejściowych, a zwłaszcza bez parametrów wejściowych przekazanych przez użytkownika!