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

Nie można użyć mysql_real_escape_string

Pierwszy punkt:jeśli otrzymujesz błąd z mysql_real_escape_string() , to dlatego, że wywołujesz funkcję przed połączeniem z bazą danych.

Wygląda na to, że łączysz się z bazą danych tuż przed uruchomieniem zapytania. Więc wszystko, co zrobisz, zanim wywołasz mm_mysqlquery() funkcja nie będzie miała połączenia.

mysql_real_escape_string() funkcja potrzebuje połączenia na żywo z bazą danych, więc może wykonać właściwy rodzaj ucieczki w odniesieniu do zestawu znaków połączenia. Musisz więc połączyć się przed uciekasz.

Tak czy inaczej, lepiej to zrobić, ponieważ jeśli wykonasz kilka zapytań w trakcie jednego żądania PHP, połączenie raz jest mniejsze. i używaj tego samego połączenia do wszystkich zapytań.

Po drugie, proszę nie brać pod uwagę sugestii użycia addslashes() -- nie robi tego samego co mysql_real_escape_string() . Te dwa nie są wymienne. Powinieneś przyzwyczaić się do używania mysql_real_escape_string() .

Po trzecie, twoja sani() funkcja pokazuje powszechne nieporozumienie.

function sani($string){     
  $string = strip_tags($string); 
  $string = htmlspecialchars($string); 
  $string = trim(rtrim(ltrim($string))); 
  $string = mysql_real_escape_string($string);
  return $string;
}

Powszechnym błędnym przekonaniem jest to, że wszystkie te funkcje są potrzebne do uczynienia łańcucha bezpiecznym w instrukcji SQL. Ty nie. Tylko mysql_real_escape_string() jest konieczne. Wszystkie inne funkcje w tym przykładzie nie chronią przed wstrzyknięciem SQL.

Te funkcje są przydatne, jeśli wyprowadzasz ciąg znaków w prezentacji HTML i chcesz zmniejszyć ryzyko ataków XSS, ale wtedy mysql_real_escape_string() nie ma znaczenia.

Użyj każdego rodzaju metody odkażania w odpowiednim kontekście.



  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 podzielić tabelę według kolumny datetime?

  2. Zachowaj podziały wierszy z TextArea podczas pisania w MySQL

  3. Błąd zgodności dostawcy bazy danych Entity Framework

  4. Kolejność zapytań MySQL według wielu elementów

  5. Wybierz wiersz z tabeli lewego sprzężenia, w której spełnionych jest wiele warunków