sql >> Database >  >> RDS >> Mysql

Waarom is het gebruik van een op mysql voorbereide instructie veiliger dan het gebruik van de algemene escape-functies?

Een belangrijk punt dat ik denk dat mensen hier missen, is dat met een database die geparameteriseerde queries ondersteunt, er geen 'ontsnapping' is om je zorgen over te maken. De database-engine combineert de gebonden variabelen niet in de SQL-instructie en analyseert vervolgens het geheel; De gebonden variabelen worden apart gehouden en nooit geparseerd als een generieke SQL-instructie.

Dat is waar de veiligheid en snelheid vandaan komen. De database-engine weet dat de tijdelijke aanduiding alleen gegevens bevat, dus wordt deze nooit geparseerd als een volledige SQL-instructie. De versnelling komt wanneer u een instructie één keer voorbereidt en vervolgens vele malen uitvoert; het canonieke voorbeeld is het invoegen van meerdere records in dezelfde tabel. In dit geval hoeft de database-engine slechts één keer te parseren, optimaliseren, enz.

Nu is er een probleem met database-abstractiebibliotheken. Ze vervalsen het soms door de gebonden variabelen in de SQL-instructie in te voegen met de juiste escaping. Toch is dat beter dan het zelf te doen.



  1. Een opgeslagen procedure aanroepen binnen een opgeslagen procedure

  2. PostgreSQL 12:Foreign Keys en gepartitioneerde tabellen

  3. Een rapport groeperen op meerdere velden in Access 2016

  4. MySQL:Wat is een omgekeerde versie van LIKE?