sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor er det mere sikkert at bruge en mysql-forberedt sætning end at bruge de almindelige escape-funktioner?

En vigtig pointe, som jeg synes, at folk her mangler, er, at med en database, der understøtter parametriserede forespørgsler, er der ingen 'undslippe' at bekymre sig om. Databasemotoren kombinerer ikke de bundne variable i SQL-sætningen og analyserer derefter det hele; De bundne variable holdes adskilt og parses aldrig som en generisk SQL-sætning.

Det er derfra sikkerheden og hurtigheden kommer. Databasemotoren ved, at pladsholderen kun indeholder data, så den parses aldrig som en fuld SQL-sætning. Fremskyndelsen kommer, når du forbereder en erklæring én gang og derefter udfører den mange gange; det kanoniske eksempel er at indsætte flere poster i den samme tabel. I dette tilfælde behøver databasemotoren kun at parse, optimere osv. én gang.

Nu er en gotcha med databaseabstraktionsbiblioteker. Nogle gange forfalsker de det ved blot at indsætte de bundne variabler i SQL-sætningen med den korrekte escape. Alligevel er det bedre end at gøre det selv.



  1. Henter data fra sql databse i flutter datewise?

  2. SQL Server Management Studio (SSMS)

  3. Sådan kontrolleres status for PostgreSQL-serveren Mac OS X

  4. Hvordan make_date() virker i PostgreSQL