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

Co to znaczy uciec przed napisem?

Ucieczka z ciągu oznacza zmniejszenie niejednoznaczności w cudzysłowie (i innych znakach) użytych w tym ciągu. Na przykład, kiedy definiujesz ciąg, zwykle otaczasz go podwójnymi lub pojedynczymi cudzysłowami:

"Hello World."

Ale co, jeśli mój ciąg będzie zawierał podwójne cudzysłowy?

"Hello "World.""

Teraz mam niejednoznaczność - interpreter nie wie, gdzie kończy się mój ciąg. Jeśli chcę zachować swoje podwójne cudzysłowy, mam kilka opcji. Mógłbym użyć pojedynczych cudzysłowów wokół mojego ciągu:

'Hello "World."'

Lub mogę uciec od moich cytatów:

"Hello \"World.\""

Każdy cytat poprzedzony ukośnikiem jest pominięty i rozumiane jako część wartości ciągu.

Jeśli chodzi o zapytania, MySQL ma pewne słowa kluczowe, które obserwuje, a których nie możemy użyć w naszych zapytaniach bez powodowania zamieszania. Załóżmy, że mamy tabelę wartości, w której kolumna ma nazwę „Wybierz” i chcemy ją wybrać:

SELECT select FROM myTable

Wprowadziliśmy teraz do naszego zapytania pewną niejednoznaczność. W naszym zapytaniu możemy zmniejszyć tę niejednoznaczność, używając wstecznych znaczników:

SELECT `select` FROM myTable

Eliminuje to zamieszanie, które wprowadziliśmy, stosując złą ocenę sytuacji podczas wybierania nazw pól.

Wiele z tych rzeczy można załatwić, po prostu przekazując swoje wartości przez mysql_real_escape_string() . W poniższym przykładzie widać, że przekazujemy dane przesłane przez użytkownika za pomocą tej funkcji, aby upewnić się, że nie spowoduje to żadnych problemów dla naszego zapytania:

// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));

Istnieją inne metody ucieczki ciągów, takie jak add_slashes , addcslashes , quotemeta i nie tylko, choć przekonasz się, że gdy celem jest uruchomienie bezpiecznego zapytania, większość programistów preferuje mysql_real_escape_string lub pg_escape_string (w kontekście PostgreSQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. rails + MySQL na OSX:Biblioteka nie załadowana:libmysqlclient.18.dylib

  2. MySQL usuwa zduplikowane rekordy, ale zachowuje najnowsze

  3. Jak wykryć znaki UTF-8 w zakodowanej kolumnie Latin1 - MySQL

  4. MySQL przyznaje wszystkie uprawnienia do bazy danych z wyjątkiem jednej tabeli

  5. Jak zmienić kolumnę i zmienić domyślną wartość?