Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytania parametryczne MySQL

Uważaj na interpolację ciągów znaków dla zapytań SQL, ponieważ nie spowoduje to poprawnej ucieczki parametrów wejściowych i pozostawi Twoją aplikację otwartą na luki związane z iniekcją SQL. Różnica może wydawać się banalna, ale w rzeczywistości jest ogromna .

Nieprawidłowo (z problemami z bezpieczeństwem)

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

Poprawnie (z ucieczką)

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

Zwiększa zamieszanie, że modyfikatory używane do wiązania parametrów w instrukcji SQL różnią się w zależności od implementacji API DB oraz że biblioteka klienta mysql używa printf składnia stylu zamiast powszechnie akceptowanego „?” znacznik (używany np. przez python-sqlite ).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja MySQL CRC32() – Przykłady

  2. Jaka jest różnica między utf8_general_ci a utf8_unicode_ci?

  3. Jak dodać niestandardowe ograniczenie CHECK w tabeli MySQL?

  4. Używasz LIMIT w GROUP BY, aby uzyskać N wyników na grupę?

  5. Użyj relacyjnych baz danych MySQL na Ubuntu 10.04 LTS (Lucid)