I grund och botten, varje gång du använder vissa osäkra data (användarinmatning, värde från en databas, en fil eller en extern webbplats, dvs. all data som du inte är 100 % säker på att den är säker) i en SQL-fråga, bör du undkomma den med mysql_real_escape_string . Observera att enligt OWASP , den här funktionen är inte säker för att undvika dynamiska tabellnamn (men detta är mycket mindre vanligt än "grundläggande" användarinmatning).
Jag föreslår att du tar en titt på hela OWASP-artikeln om SQL-injektion , och även för att bläddra i resten av webbplatsen. Det är en utmärkt källa till information om säkerhet i webbapplikationer.
IMO, det föredragna sättet att förhindra SQL-injektion är att använda förberedda uttalanden .
Kom ihåg att om du väljer att använda mysql_real_escape_string()
det fungerar bara när det används i en sträng som är avgränsad av citattecken. Använd den aldrig på några icke-citerade värden. Detta inkluderar numeriska värden; verifiera istället att användarinmatningen faktiskt är numerisk.