sql >> Databasteknik >  >> RDS >> Mysql

Varför är det säkrare att använda en mysql-förberedd sats än att använda de vanliga escape-funktionerna?

En viktig punkt som jag tror att folk här saknar är att med en databas som stöder parametriserade frågor finns det ingen "undantag" att oroa sig för. Databasmotorn kombinerar inte de bundna variablerna i SQL-satsen och analyserar sedan det hela; De bundna variablerna hålls separata och tolkas aldrig som en generisk SQL-sats.

Det är därifrån tryggheten och snabbheten kommer. Databasmotorn vet att platshållaren endast innehåller data, så den tolkas aldrig som en fullständig SQL-sats. Snabbheten kommer när du förbereder ett uttalande en gång och sedan kör det många gånger; det kanoniska exemplet är att infoga flera poster i samma tabell. I det här fallet behöver databasmotorn bara analysera, optimera etc. en gång.

Nu är en gotcha med databasabstraktionsbibliotek. De förfalskar det ibland genom att bara infoga de bundna variablerna i SQL-satsen med rätt escape. Ändå är det bättre än att göra det själv.



  1. Sortera efter veckodag från måndag till söndag

  2. Förklaring av JSONB introducerad av PostgreSQL

  3. Tally Tabell för att infoga saknade datum mellan två datum? SQL

  4. Hur man formaterar ett datum i T-SQL