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

Czy należy używać przygotowanych wyciągów tylko do ich ucieczki?

Różnica uważana za nieistotną.

Niemniej jednak należy odróżnić natywne przygotowane oświadczenia z ogólnej idei przygotowanego zestawienia.

To pierwsze to po prostu forma uruchamiania zapytań obsługiwana przez większość DBMS, wyjaśniona tutaj . Jego użycie może być kwestionowane.
To ostatnie to ogólna idea zastępowania rzeczywistych danych symbolem zastępczym, co oznacza dalsze przetwarzanie podstawionych danych. Jest szeroko stosowany w programowaniu, dobrze znana printf() funkcja jest przykładem. I to drugie podejście musi być ZAWSZE używane do uruchamiania zapytania w bazie danych , bez względu na to, czy jest poparte natywnymi instrukcjami przygotowanymi, czy nie. Ponieważ:

  • przygotowane oświadczenie sprawia, że ​​prawidłowe formatowanie (lub obsługa) nieuniknione .
  • przygotowana instrukcja prawidłowo formatuje (lub obsługuje) w jedynym właściwym miejscu - tuż przed wykonaniem zapytania, a nie gdzie indziej, więc nasze bezpieczeństwo nie będzie polegać na tak niewiarygodnych źródłach jak
    • niektóre „magiczne” funkcje PHP, które raczej psują dane niż czynią je bezpiecznymi.
    • dobrej woli jednego (lub kilku) programistów, którzy mogą zdecydować się na formatowanie (lub nieformatowanie) naszej zmiennej gdzieś w przepływie programu. To bardzo ważny punkt.
  • przygotowane oświadczenie ma wpływ na samą wartość, która jest wprowadzana do zapytania, ale nie na zmienną źródłową, która pozostaje nienaruszona i może być użyta w dalszym kodzie (do wysłania e-mailem lub pokazana na ekranie).
  • przygotowana instrukcja może znacznie skrócić kod aplikacji, wykonując całe formatowanie w tle (*tylko jeśli pozwala na to sterownik).

Tak więc, nawet jeśli uważasz, że nie korzystasz z natywnie przygotowanych instrukcji (co jest całkiem w porządku), zawsze musisz tworzyć zapytania za pomocą symboli zastępczych zamiast rzeczywistych danych. W tym celu możesz użyć PDO , który działa dokładnie tak, jak opisano powyżej - domyślnie po prostu emuluje przygotowania , oznacza zwykłe zapytanie SQL tworzone z przygotowanych zapytań i danych, a następnie uruchamiane w bazie danych.

Jednak PDO nie obsługuje wielu ważnych typów danych, takich jak identyfikator lub tablica - w związku z tym nie można zawsze używać symboli zastępczych, a tym samym wstrzyknięcie jest całkiem możliwe. Na szczęście safeMysql zawiera symbole zastępcze dla każdego typu danych i umożliwia bezpieczne uruchamianie zapytań.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL sprawdza, czy tabela już istnieje

  2. Ostrzeżenie:mysqli_num_rows() oczekuje dokładnie 1 parametru, 2 podane | mysql | mysqli

  3. Jak stworzyć sekwencję w MySQL

  4. Nie można połączyć się z serwerem MySQL na (IP lub nazwa domeny)

  5. Przygotowane wyciągi PHP PDO