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

Perché l'utilizzo di un'istruzione preparata da MySQL è più sicuro rispetto all'utilizzo delle comuni funzioni di escape?

Un punto importante che penso manchi alle persone qui è che con un database che supporta query parametrizzate, non c'è "scappare" di cui preoccuparsi. Il motore di database non combina le variabili associate nell'istruzione SQL e quindi analizza il tutto; Le variabili associate vengono mantenute separate e non analizzate mai come un'istruzione SQL generica.

Ecco da dove vengono la sicurezza e la velocità. Il motore di database sa che il segnaposto contiene solo dati, quindi non viene mai analizzato come un'istruzione SQL completa. L'accelerazione arriva quando prepari un'istruzione una volta e poi la esegui molte volte; l'esempio canonico è l'inserimento di più record nella stessa tabella. In questo caso, il motore di database deve analizzare, ottimizzare, ecc. solo una volta.

Ora, uno è con le librerie di astrazione del database. A volte lo falsificano semplicemente inserendo le variabili associate nell'istruzione SQL con l'escape appropriato. Tuttavia, è meglio che farlo da soli.