Første punkt:Hvis du får en fejl fra mysql_real_escape_string()
, det er fordi du kalder funktionen før du er forbundet til databasen.
Det ser ud til, at du opretter forbindelse til databasen, lige før du kører en forespørgsel. Altså alt hvad du gør, før du kalder din mm_mysqlquery()
funktion vil ikke have en forbindelse.
mysql_real_escape_string()
funktion har brug for en live forbindelse til databasen, så den kan lave den rigtige form for escape i forhold til forbindelsens tegnsæt. Så du skal oprette forbindelse før du undslipper.
Det er bedre at gøre det alligevel, for hvis du laver flere forespørgsler i løbet af en enkelt PHP-anmodning, er det mindre overhead at oprette forbindelse én gang og brug den samme forbindelse til alle dine forespørgsler.
For det andet, tag ikke imod forslag om at bruge addslashes()
-- det gør ikke det samme som mysql_real_escape_string()
. De to er ikke udskiftelige. Du bør vænne dig til at bruge mysql_real_escape_string()
.
For det tredje din sani()
funktion viser en almindelig misforståelse.
function sani($string){
$string = strip_tags($string);
$string = htmlspecialchars($string);
$string = trim(rtrim(ltrim($string)));
$string = mysql_real_escape_string($string);
return $string;
}
Den almindelige misforståelse er, at du har brug for alle disse funktioner for at gøre en streng sikker i en SQL-sætning. Det gør du ikke. Kun mysql_real_escape_string()
er nødvendigt. Alle de andre funktioner i dette eksempel beskytter ikke mod SQL-injektion.
Disse funktioner er nyttige, hvis du udskriver en streng i en HTML-præsentation, og du vil reducere risikoen for XSS-angreb, men derefter mysql_real_escape_string()
er irrelevant.
Brug hver type desinficeringsmetode i dens passende sammenhæng.