För det första, vad det här handlar om kallas SQL-injektion . Det är i princip bara möjligheten att ändra frågor mot databasen via användarinmatning.
Låt oss titta på ett exempel:
Fråga:
SELECT temp1 FROM temp WHERE temp2 = 'VAR1';
Nu kommer vi att tilldela VAR1 värdet av:'; DROP TABLE *; --
Och vi får:
SELECT temp1 FROM temp WHERE temp2 = ''; DROP TABLE *; --';
Med mysql_real_escape_string
det skulle se ut så här:
SELECT temp1 FROM temp WHERE temp2 = '\'; DROP TABLE *; --'
mysql_real_escape_string
"säkrar" en sträng för användning i en fråga.
Men i slutändan bör du sluta använda mysql_*
totalt . De är utfasade och anses vara osäkra när det gäller att förhindra SQL-injektion eller andra sätt att mildra frågorna.
Du borde helt enkelt sluta sammanfoga frågor så här och börja använda förberedda uttalanden , som inte bara är enklare att använda, förhindrar SQL-injektion som standard utan kan också förbättra din applikations hastighet.
För PHP finns det två tillägg som är designade för att stänga hela mysql_*
öppnad:
Och jag säger det igen:Snälla sluta använda mysql_*
!