sql >> Database teknologi >  >> RDS >> Mysql

Hvad er forskellen mellem PHP's addslashes og mysql(i)_escape_string?

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.



  1. Returner antallet af dage i en måned i MariaDB

  2. SQLite JSON_ARRAY()

  3. Vis en enkelt kolonneværdi for mysqli-forespørgsel

  4. PostgreSQL Logical Replication Gotchas