Først og fremmest:brug ikke mysql_escape_string
, den er forældet (af en grund)!
Hvis du skal understøtte en ældre applikation, der forbinder til databasen via mysql
udvidelse (som er blevet udfaset
), brug mysql_real_escape_string
i stedet. Ellers skift med det samme
til mysqli
, hvor forberedte udsagn og bundne parametre giver en mere robust mekanisme til at undslippe brugerinput.
Når det er sagt, kan svaret findes ved at læse beskrivelsen af mysql_real_escape_string
og addslashes
:
Forskel #1
addslashes
ved ikke noget om MySql-forbindelseskodninger. Hvis du sender den en streng, der indeholder bytes, der repræsenterer en anden kodning end den kodning, der bruges af MySql-forbindelsen, vil den med glæde undslippe alle bytes, der har karakterernes værdier '
, "
, \
og \x00
. Dette er muligvis ikke det samme som alle tegnene '
, "
, \
og \x00
hvis du bruger en anden kodning end 8-bit-kodning og UTF-8. Resultatet vil være, at strengen modtaget af MySql vil blive beskadiget.
For at udløse denne fejl, prøv at bruge iconv
at konvertere din variabel til UTF-16 og derefter undslippe den med addslashes
. Se, hvad din database modtager.
Dette er en af grundene til addslashes
bør ikke bruges til at undslippe.
Forskel #2
I modsætning til addslashes
, mysql_real_escape_string
undlader også tegnene \r
, \n
og \x1a
. Det ser ud til, at disse tegn også skal escapes, når man taler til MySql, ellers kan en forkert udformet forespørgsel være resultatet
Dette er den anden grund til addslashes
bør ikke bruges til at undslippe.