Pierwszy punkt:jeśli otrzymujesz błąd z mysql_real_escape_string()
, to dlatego, że wywołujesz funkcję przed połączeniem z bazą danych.
Wygląda na to, że łączysz się z bazą danych tuż przed uruchomieniem zapytania. Więc wszystko, co zrobisz, zanim wywołasz mm_mysqlquery()
funkcja nie będzie miała połączenia.
mysql_real_escape_string()
funkcja potrzebuje połączenia na żywo z bazą danych, więc może wykonać właściwy rodzaj ucieczki w odniesieniu do zestawu znaków połączenia. Musisz więc połączyć się przed uciekasz.
Tak czy inaczej, lepiej to zrobić, ponieważ jeśli wykonasz kilka zapytań w trakcie jednego żądania PHP, połączenie raz jest mniejsze. i używaj tego samego połączenia do wszystkich zapytań.
Po drugie, proszę nie brać pod uwagę sugestii użycia addslashes()
-- nie robi tego samego co mysql_real_escape_string()
. Te dwa nie są wymienne. Powinieneś przyzwyczaić się do używania mysql_real_escape_string()
.
Po trzecie, twoja sani()
funkcja pokazuje powszechne nieporozumienie.
function sani($string){
$string = strip_tags($string);
$string = htmlspecialchars($string);
$string = trim(rtrim(ltrim($string)));
$string = mysql_real_escape_string($string);
return $string;
}
Powszechnym błędnym przekonaniem jest to, że wszystkie te funkcje są potrzebne do uczynienia łańcucha bezpiecznym w instrukcji SQL. Ty nie. Tylko mysql_real_escape_string()
jest konieczne. Wszystkie inne funkcje w tym przykładzie nie chronią przed wstrzyknięciem SQL.
Te funkcje są przydatne, jeśli wyprowadzasz ciąg znaków w prezentacji HTML i chcesz zmniejszyć ryzyko ataków XSS, ale wtedy mysql_real_escape_string()
nie ma znaczenia.
Użyj każdego rodzaju metody odkażania w odpowiednim kontekście.