Allereerst:gebruik geen mysql_escape_string , het is verouderd (met een reden)!
Als u een verouderde applicatie moet ondersteunen die verbinding maakt met de database via de mysql extensie (die is beëindigd
), gebruik mysql_real_escape_string
in plaats van. Anders onmiddellijk overschakelen
naar mysqli , waar voorbereide instructies en gebonden parameters een robuuster mechanisme bieden om gebruikersinvoer te ontlopen.
Dat gezegd hebbende, het antwoord kan worden gevonden door de beschrijving te lezen van mysql_real_escape_string
en addslashes
:
Verschil #1
addslashes weet niets over MySql-verbindingscoderingen. Als je het een string doorgeeft met bytes die een andere codering vertegenwoordigen dan de codering die wordt gebruikt door de MySql-verbinding, zal het met plezier ontsnappen aan alle bytes met de waarden van de tekens ' , " , \ en \x00 . Dit is mogelijk niet hetzelfde als alle tekens ' , " , \ en \x00 als u een andere codering gebruikt dan 8-bits codering en UTF-8. Het resultaat is dat de string die door MySql wordt ontvangen, beschadigd raakt.
Probeer om deze bug te activeren iconv
om uw variabele naar UTF-16 te converteren en er vervolgens aan te ontsnappen met addslashes . Bekijk wat uw database ontvangt.
Dit is een reden waarom addslashes mag niet worden gebruikt om te ontsnappen.
Verschil #2
In tegenstelling tot addslashes , mysql_real_escape_string ontsnapt ook aan de tekens \r , \n , en \x1a . Het lijkt erop dat deze tekens ook moeten worden ontsnapt wanneer u met MySql praat, anders kan een verkeerd opgemaakte zoekopdracht het resultaat zijn
Dit is de andere reden waarom addslashes mag niet worden gebruikt om te ontsnappen.