Detta isolerade exempel är osårbart för injektion.
Men du måste inse att skydd från sql-injektion inte bara är en karaktärsersättning . Och omständigheterna kan skilja sig från dem du för närvarande tar för givna. Så din kod skulle bli sårbar på lång sikt på grund av väsentliga nackdelar med denna metod :
- teckenersättning är bara en del av nödvändig formatering
- denna speciella ersättning kan endast tillämpas på strängar och lämnar andra delar helt oskyddade.
- en sådan ersättning är extern i förhållande till en sökningskörning, vilket betyder att den är benägen för mänskliga fel av något slag.
- en sådan ersättning är en väsentligen löstagbar åtgärd, vilket innebär att den kan flyttas för långt bort från den faktiska sökexekveringen och så småningom glömmas bort.
- denna typ av flykt är benägen att kodningsattack , vilket gör lösningen för begränsad i användning.
Det är inget fel i teckenersättning i sig, men bara om det används som en del av komplett formatering; tillämpas på rätt frågedel; och gjort av en databasdrivrutin, inte en programmerare; precis innan exekvering.
Funktioner som du föreslog i kommentarerna är ett bra steg, men fortfarande otillräckliga, eftersom de är föremål för nackdelarna som anges ovan, vilket gör dem utsatta för alla möjliga mänskliga fel.
Och SQL-injektion är inte det enda problemet med det här tillvägagångssättet, det är också ett användbarhetsfel, eftersom den här funktionen antingen skulle förstöra din data, om den används som en inkarnation av sent magiska citat , eller gör din kod uppsvälld, om den används för att formatera varje variabel direkt i applikationskoden.
Sådana funktioner kan bara användas för att bearbeta en platshållare , men givetvis inte genom att använda en hembryggd ersättningsfunktion, utan en korrekt funktion som tillhandahålls av databasens API.