sql >> Databasteknik >  >> RDS >> Mysql

MySQL-parameteriserade frågor

Se upp för att använda stränginterpolation för SQL-frågor, eftersom det inte kommer att undvika indataparametrarna korrekt och lämnar din applikation öppen för SQL-injektionssårbarheter. Skillnaden kan verka trivial, men i verkligheten är den enorm .

Felaktigt (med säkerhetsproblem)

c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))

Rätt (med escape)

c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))

Det ökar förvirringen att modifierarna som används för att binda parametrar i en SQL-sats varierar mellan olika DB API-implementeringar och att mysql-klientbiblioteket använder printf stilsyntax istället för det mer allmänt accepterade "?" markör (används av t.ex. python-sqlite ).



  1. Mer om CXPACKET Waits:Skewed Parallelism

  2. Anropar en annan PL/SQL-procedur inom en procedur

  3. Vad är det korrekta sättet att använda node.js postgresql-modulen?

  4. Grupperad strängaggregation / LISTAGG för SQL Server