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

Jaka jest różnica między addslashami PHP a mysql(i)_escape_string?

Po pierwsze:nie używaj mysql_escape_string , jest przestarzałe (z jakiegoś powodu)!

Jeśli musisz obsługiwać starszą aplikację, która łączy się z bazą danych przez mysql rozszerzenie (które zostało przestarzałe ), użyj mysql_real_escape_string zamiast. W przeciwnym razie przełącz się natychmiast do mysqli , gdzie przygotowane instrukcje i powiązane parametry zapewniają bardziej niezawodny mechanizm unikania danych wprowadzanych przez użytkownika.

To powiedziawszy, odpowiedź można znaleźć, czytając opis mysql_real_escape_string i addslashes :

Różnica nr 1

addslashes nie wie nic o kodowaniu połączeń MySql. Jeśli przekażesz mu ciąg zawierający bajty reprezentujące kodowanie inne niż kodowanie używane przez połączenie MySql, szczęśliwie uniknie wszystkich bajtów mających wartości znaków ' , " , \ i \x00 . To może nie być to samo, co wszystkie znaki ' , " , \ i \x00 jeśli używasz kodowania innego niż kodowanie 8-bitowe i UTF-8. W rezultacie ciąg otrzymany przez MySql będzie uszkodzony.

Aby wywołać ten błąd, spróbuj użyć iconv aby przekonwertować twoją zmienną na UTF-16, a następnie zmienić ją za pomocą addslashes . Zobacz, co otrzymuje Twoja baza danych.

To jeden z powodów, dla których addslashes nie powinien być używany do ucieczki.

Różnica nr 2

W przeciwieństwie do addslashes , mysql_real_escape_string zmienia również znaczenie znaków \r , \n i \x1a . Wygląda na to, że te znaki również muszą zostać zmienione podczas rozmowy z MySql, w przeciwnym razie wynikiem może być źle sformułowane zapytanie

To kolejny powód, dla którego addslashes nie powinien być używany do ucieczki.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dodać identyfikator automatycznego przyrostu zgodnie z grupą w mysql

  2. Jak wypełnić luki dat w MySQL?

  3. Uruchom surowy SQL podczas migracji

  4. this._callback.apply nie jest funkcją! Błąd Node js Mysql

  5. Konfigurowanie klastra MySQL InnoDB z powłoką MySQL (plus router MySQL)