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

Når jeg undslipper alle input, efterlader den nogle gange skråstreger (\) i strengen og indsætter den i databasen. Hvorfor sker det, og hvordan kan jeg løse dette?

Du har ret.
magiske citater har intet at gøre med sql-ting og bør ikke være forbundet til det.
Fordi magiske citater er et problem på hele webstedet, og sql-escaping er kun sql-relateret problem.

Så de har brug for forskellig behandling og bør aldrig bruges sammen.

Du er nødt til at slippe af med magiske citater ubetinget, fordi det ødelægger ikke kun SQL-ting, men enhver datamanipulation af dit websted.

Så det ville være klogt at sætte nogle stripslashes-kode i hvilken som helst bootstrap-fil, der skal køres ved hvert kald af scriptet. Koden kan du finde i adskillige implementeringer af sådan en kode, bare google efter funktionen 'stripslashes_deep'.

Det ville være klogt at have denne kode altid kørende (naturligvis under betingelseskontrol get_magic_quotes_gpc()) på trods af den faktiske tilstand af magiske citater, bare for kompatibilitetens skyld.

Men der er en anden mulighed for at slå dem fra:prøv at oprette en php.ini-fil i roden af ​​dit program.

Der er dog en alvorlig fejl i din kode. Faktisk beskytter det ikke noget.
Du undslipper $memberid og $postid men citer dem ikke! . Der er således ingen beskyttelse overhovedet. Bare fordi undslippe kun virker, når det bruges med citat.

Husk venligst:

Escaping er ikke et synonym for sikkerhed!

At flygte alene kan intet hjælpe. Der er et helt sæt regler, der skal følges.

Jeg skrev en anstændig forklaring for nylig, så jeg ville ikke gentage mig selv:Erstatning af mysql_*-funktioner med PDO og forberedte sætninger



  1. SQL:OPDATERING med INNER JOIN med LIMIT

  2. Håndtering af PostgreSQL High Availability – Del I:PostgreSQL Automatic Failover

  3. Fejlfinding af Microsoft SQL Server-fejl 18456

  4. vBulletin som login for hele webstedet (rediger:der er gjort en vis fremskridt)