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

Wprowadź tekst i znaki specjalne oraz MySQL

Masz dobry pomysł na przechowywanie tekstu w bazie danych jako surowego. Nie jestem pewien, do czego służą wszystkie elementy encji HTML; nie powinieneś tego robić, aby wstawić bazę danych.

[Jedynym powodem, dla którego mogę wymyślić, dlaczego możesz próbować zdekodować dane wejściowe przychodzące do bazy danych, byłoby to, że otrzymujesz odwołania do znaków, takie jak Š w formularzu zgłoszeniowym. Jeśli tak się dzieje, dzieje się tak, ponieważ użytkownik wprowadza znaki, które nie istnieją w kodowaniu używanym przez stronę z formularzem. Ta forma kodowania jest całkowicie fałszywa, ponieważ nie można wtedy odróżnić użytkownika wpisującego Š i dosłownie wpisując Š ! Powinieneś tego uniknąć, używając kodowania UTF-8 dla wszystkich swoich stron i treści, ponieważ każdy możliwy znak pasuje do tego kodowania.]

Ciągi w twoim skrypcie powinny zawsze być czystym tekstem bez znaków ucieczki. Oznacza to, że nie robisz z nimi nic, dopóki nie wypiszesz ich w kontekście, który nie jest zwykłym tekstem. Aby umieścić je w ciągu SQL:

$category= trim($_POST['category']);
mysql_query("SELECT * FROM things WHERE category='".mysql_real_escape_string($category)."'");

(lub użyj sparametryzowanych zapytań, aby uniknąć konieczności ręcznego zmieniania go.) Podczas umieszczania treści w HTML:

<input type="text" name="category" value="<?php echo htmlspecialchars($category); ?>" />

(możesz zdefiniować funkcję pomocniczą o krótszej nazwie, np. function h($s) { echo htmlspecialchars($s, ENT_QUOTES); } jeśli chcesz zmniejszyć ilość pisania, które musisz wykonać w szablonach.)

I... to prawie wszystko. Nie musisz przetwarzać ciągów wychodzących z bazy danych, ponieważ są to już surowe ciągi. Nie musisz przetwarzać ciągów wejściowych(*), innych niż walidacja pól specyficznych dla aplikacji, którą chcesz wykonać.

*:dobrze, chyba że magic_quotes_gpc jest włączona, w takim przypadku musisz albo stripslashes() wszystko, co pochodzi z get/post/cookie lub, moja ulubiona opcja, natychmiast kończy się niepowodzeniem:

if (get_magic_quotes_gpc())
    die(
        'Magic quotes are turned on. They are utterly bogus and no-one should use them. '.
        'Turn them off, you idiot, or I refuse to run. So there!'
    );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ile zapytań to za dużo?

  2. MySQL:Aktualizuję wszystkie wiersze ustawiając pole na 0, ale ustawiając pole jednego wiersza na 1

  3. Wyłącz ostrzeżenia i błędy w PHP i MySQL

  4. Zagnieżdżone relacje z Sequelize

  5. Podłączanie MySQL do Apache nutch