Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum ist die Verwendung einer vorbereiteten MySQL-Anweisung sicherer als die Verwendung der üblichen Escape-Funktionen?

Ein wichtiger Punkt, den die Leute hier meiner Meinung nach vermissen, ist, dass es bei einer Datenbank, die parametrisierte Abfragen unterstützt, keinen Grund zur Sorge gibt. Die Datenbank-Engine kombiniert die gebundenen Variablen nicht in der SQL-Anweisung und parst dann das Ganze; Die gebundenen Variablen werden getrennt gehalten und niemals als generische SQL-Anweisung geparst.

Daher kommt die Sicherheit und Geschwindigkeit. Die Datenbank-Engine weiß, dass der Platzhalter nur Daten enthält, daher wird er nie als vollständige SQL-Anweisung geparst. Die Beschleunigung kommt, wenn Sie eine Anweisung einmal vorbereiten und sie dann viele Male ausführen; Das kanonische Beispiel ist das Einfügen mehrerer Datensätze in dieselbe Tabelle. In diesem Fall muss die Datenbank-Engine nur einmal parsen, optimieren usw.

Nun, ein Problem sind Datenbank-Abstraktionsbibliotheken. Sie täuschen es manchmal vor, indem sie einfach die gebundenen Variablen mit dem richtigen Escapezeichen in die SQL-Anweisung einfügen. Das ist immer noch besser, als es selbst zu tun.