Problem w tym, że błąd nie wystąpił, a znak # powoduje, że zapytania za znakiem nie będą brane pod uwagę. Doszedłem już w czym jest problem. Zapytanie jest generowane z formularza. Wygląda to tak
<?php
$q = "SELECT id FROM $users_table WHERE email = '$email' AND login = '$login' LIMIT 1";
?>
Za pomocą POST do zmiennej login wstawiam
test& # 3 9 ; and 1=3 UNION SELECT id FROM uzytkownicy WHERE id=1 #
Czyli zapytanie po wyświetleniu echo wygląda tak
SELECT id FROM uzytkownicy WHERE email = 'email' AND login = 'jakis login' AND 1=3 UNION SELECT id FROM uzytkownicy WHERE id=6 #' LIMIT 1
ale tak naprawdę do serwera mysql jest wysyłane w postaci
SELECT id FROM users WHERE email = 'email' AND login = 'jakis login& # 3 9 ; and 1=3 UNION SELECT id FROM uzytkownicy WHERE id=6
Dlatego zapytanie jest komentowane za pomocą # i nie zwraca błędu. Dla wyjaśnienia użyłem & # 3 9 ; bo jest to odpowiednik ' w unicode, a normalny ' w post jest zamieniany na \'
Czy da się temu jakoś zaradzić czy skrypt jest bezpieczny?