De query die u in de vraag hebt getoond, gebruikt geen door de gebruiker opgegeven waarden, dus er is geen geval van SQL-injectie, maar in een algemeen geval:-
Ten eerste moet u alle validate valideren de gebruikersinvoer (gebruikersnamen, e-mails enz.) voordat u deze in een query gebruikt. Bijvoorbeeld:- Als u alleen alfanumerieke tekens in een gebruikersnaam hebt toegestaan, moet u controleren of de invoer daadwerkelijk alfanumeriek is of niet voordat u doorgaat met het vormen van een databasequery en u moet ook de grootte van alle invoer controleren.
Daarna is naar mijn mening Prepared Statements de beste keuze om SQL-injectie te voorkomen.
Probleem met mysql_real_escape_string():-
Omdat mysql_real_escape_string() tekens ontsnapt volgens de standaardtekenset, is het dus beter dan de functie Addlashes() en het zuivert SQL-injecties als gevolg van misbruik van multibyte-tekensets , maar in een ander artikel hier , wordt een workaround-scenario getoond waarin wordt uitgelegd dat injectie nog steeds kan worden gedaan.
Oplossing:-
Dus de juiste en betere manier om SQL-injectie te voorkomen, is door voorbereide instructies te gebruiken. Het is een techniek waarbij SQL-instructies worden voorgecompileerd voordat de gebruikersinvoer (parameters) worden ingevoegd en worden behandeld als herbruikbare SQL-sjablonen. Het scheidt dus de gebruikersinvoer van de daadwerkelijke SQL-code en de SQL-parser ontleedt nooit de gebruikersinvoer.
Afgezien van de beveiliging, optimaliseert het ook de SQL-query voor snelheid. Het helpt in gevallen waarin u dezelfde zoekopdracht meerdere keren moet uitvoeren met verschillende gebruikersinvoer.
U kunt de PHP-handleiding raadplegen voor details over de implementatie.