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

MySQL parametrizované dotazy

Dejte si pozor na používání řetězcové interpolace pro dotazy SQL, protože nebude správně unikat vstupním parametrům a vaše aplikace zůstane otevřená zranitelnostem vkládání SQL. Rozdíl se může zdát triviální, ale ve skutečnosti je obrovský .

Nesprávné (s bezpečnostními problémy)

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

Správně (s escapováním)

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

Ke zmatku přispívá to, že modifikátory používané k navázání parametrů v příkazu SQL se mezi různými implementacemi DB API liší a že klientská knihovna mysql používá printf syntaxe stylu namísto běžněji akceptovaného '?' značka (používá se např. python-sqlite ).



  1. Přirozené řazení v MySQL

  2. Jak používat role, které se změnily v MySQL 8.0

  3. 2 způsoby, jak zobrazit všechny databáze v PostgreSQL (psql)

  4. Jak SHOW CHARACTER SET funguje v MariaDB