sql >> Databáze >  >> RDS >> Mysql

Proč je použití příkazu připraveného pomocí mysql bezpečnější než použití běžných funkcí escape?

Myslím si, že důležitý bod, který zde lidem chybí, je, že s databází, která podporuje parametrizované dotazy, není žádný „útěk“ čeho se obávat. Databázový stroj nekombinuje vázané proměnné do příkazu SQL a pak to celé neanalyzuje; Vázané proměnné jsou uchovávány odděleně a nikdy nejsou analyzovány jako obecný příkaz SQL.

Odtud pramení bezpečnost a rychlost. Databázový stroj ví, že zástupný symbol obsahuje pouze data, takže nikdy není analyzován jako úplný příkaz SQL. Ke zrychlení dochází, když příkaz jednou připravíte a poté jej mnohokrát provedete; kanonickým příkladem je vložení více záznamů do stejné tabulky. V tomto případě musí databázový stroj analyzovat, optimalizovat atd. pouze jednou.

Nyní, jeden gotcha je s databázemi abstrakce knihoven. Někdy to zfalšují tak, že vázané proměnné vloží do příkazu SQL se správným escapováním. Přesto je to lepší než to dělat sám.



  1. Příklady ORD() – MySQL

  2. Jak povolit Change Data Capture (CDC) v databázi na SQL Server - SQL Server výukový program

  3. Jak získat kumulativní součet

  4. Jak sledovat, co uživatelé dělají