sql >> Databasteknik >  >> RDS >> Mysql

Vad är skillnaden mellan PHPs addslashes och mysql(i)_escape_string?

Först och främst:använd inte mysql_escape_string , den är utfasad (av en anledning)!

Om du måste stödja en äldre applikation som ansluter till databasen via mysql tillägg (som har fasats ut ), använd mysql_real_escape_string istället. Annars byt omedelbart till mysqli , där förberedda satser och bundna parametrar ger en mer robust mekanism för att undvika användarinmatning.

Som sagt, svaret kan hittas genom att läsa beskrivningen av mysql_real_escape_string och addslashes :

Skillnad #1

addslashes vet inget om MySql-anslutningskodningar. Om du skickar den en sträng som innehåller bytes som representerar en annan kodning än den som används av MySql-anslutningen, kommer den glatt att undkomma alla bytes som har värdena för tecknen ' , " , \ och \x00 . Detta kanske inte är detsamma som alla tecken ' , " , \ och \x00 om du använder en annan kodning än 8-bitars kodning och UTF-8. Resultatet blir att strängen som tas emot av MySql kommer att skadas.

För att utlösa detta fel, försök använda iconv för att konvertera din variabel till UTF-16 och sedan undkomma den med addslashes . Se vad din databas tar emot.

Detta är en anledning till varför addslashes ska inte användas för att fly.

Skillnad #2

Till skillnad från addslashes , mysql_real_escape_string escapes även tecknen \r , \n och \x1a . Det verkar som att dessa tecken också måste escapes när man pratar med MySql, annars kan en felaktig fråga bli resultatet

Detta är den andra anledningen till addslashes ska inte användas för att fly.



  1. returnera resultat från funktion

  2. Snabbt sätt att upptäcka radantalet i en tabell i PostgreSQL

  3. Varför går mysql-anslutningen av (förlorade anslutningen till MySQL-servern under frågefel)

  4. få alla föremål i kategorin och dess underordnade