Forespørgslen, du har vist i spørgsmålet, bruger ikke brugerleverede værdier, så der er ingen tilfælde af SQL-injektion, men i et generelt tilfælde:-
For det første skal du validere alle brugerens input (brugernavne, e-mails osv.), før du bruger det i en forespørgsel. For eksempel:- Hvis du kun har tilladt alfanumeriske tegn i et brugernavn, skal du kontrollere, om input faktisk er alfanumerisk eller ej, før du fortsætter med at danne en databaseforespørgsel, og du skal også kontrollere størrelsen af alle input.
Derefter er Prepared Statements efter min mening det bedste valg til at forhindre SQL-injektion.
Problem med mysql_real_escape_string():-
Da mysql_real_escape_string() undslipper tegn i henhold til standardtegnsæt, så er det bedre end addslashes()-funktionen, og den renser korrekt SQL-injektioner, der opstår som følge af misbrug af multibyte-tegnsæt , men i en anden artikel her , vises et workaround-scenario, der forklarer, at injektion stadig kan udføres.
Løsning:-
Så den rigtige og bedre måde at forhindre SQL-injektion på er at bruge forberedte sætninger. Det er en teknik, hvor SQL-sætninger prækompileres før indsættelse af brugerinput (parametre) og behandles som genanvendelige SQL-skabeloner. Så det adskiller brugerinput fra faktisk SQL-kode, og SQL-parseren parser aldrig brugerinput.
Udover sikkerhed optimerer den også SQL-forespørgslen for hastighed. Det hjælper i tilfælde, hvor du skal køre samme forespørgsel flere gange med forskellige brugerinput.
Du kan se PHP-manualen for implementeringsdetaljer.