Eerste punt:als je een foutmelding krijgt van mysql_real_escape_string()
, is dat omdat je de functie aanroept voordat je bent verbonden met de database.
Het lijkt erop dat u verbinding maakt met de database vlak voordat u een query uitvoert. Dus alles wat u doet voordat u uw mm_mysqlquery()
. aanroept functie heeft geen verbinding.
De mysql_real_escape_string()
functie heeft een live verbinding met de database nodig, zodat het de juiste soort escape kan doen met betrekking tot de tekenset van de verbinding. U moet dus voor verbinding maken je ontsnapt.
Het is beter om dat toch te doen, want als je meerdere queries maakt in de loop van een enkel PHP-verzoek, kost het minder moeite om eenmaal verbinding te maken. en gebruik dezelfde verbinding voor al uw vragen.
Ten tweede, neem alsjeblieft geen suggesties om addslashes()
te gebruiken -- het doet niet hetzelfde als mysql_real_escape_string()
. De twee zijn niet uitwisselbaar. Maak er een gewoonte van om mysql_real_escape_string()
te gebruiken .
Ten derde, uw sani()
functie toont een veelvoorkomende misvatting.
function sani($string){
$string = strip_tags($string);
$string = htmlspecialchars($string);
$string = trim(rtrim(ltrim($string)));
$string = mysql_real_escape_string($string);
return $string;
}
De algemene misvatting is dat je al deze functies nodig hebt om een string veilig te maken in een SQL-statement. Jij niet. Alleen mysql_real_escape_string()
is noodzakelijk. Alle andere functies in dit voorbeeld beschermen niet tegen SQL-injectie.
Die functies zijn handig als u een tekenreeks uitvoert in een HTML-presentatie en u het risico op XSS-aanvallen wilt verkleinen, maar dan mysql_real_escape_string()
is niet relevant.
Gebruik elk type ontsmettingsmethode in de juiste context.