Mysql
 sql >> база данни >  >> RDS >> Mysql

Въведете текст и специални знаци и MySQL

Имате правилната идея да запазите текста в базата данни като необработен. Не съм сигурен за какво са всички HTML обекти; не трябва да правите това за вмъкване на база данни.

[Единствената причина, поради която се сещам защо може да се опитате да декодирате входящия вход за базата данни, е, ако установите, че получавате препратки към знаци като Š във вашия вход за подаване на формуляра. Ако това се случва, това е защото потребителят въвежда знаци, които не съществуват в кодирането, използвано от страницата с формуляра. Тази форма на кодиране е напълно фалшива, защото тогава не можете да правите разлика между потребителя, който въвежда Š и буквално напишете Š ! Трябва да избягвате това, като използвате кодирането UTF-8 за всичките си страници и съдържание, тъй като всеки възможен знак се вписва в това кодиране.]

Низовете във вашия скрипт винаги трябва да са необработен текст без екраниране. Това означава, че не правите нищо с тях, докато не ги изведете в контекст, който не е обикновен текст. Така че за поставянето им в SQL низ:

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

(или използвайте параметризирани заявки, за да избегнете необходимостта да го избягвате ръчно.) Когато поставяте съдържание в HTML:

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

(можете да дефинирате помощна функция с по-кратко име като function h($s) { echo htmlspecialchars($s, ENT_QUOTES); } ако искате да намалите количеството въвеждане, което трябва да правите в шаблоните.)

И... това е почти всичко. Не е необходимо да обработвате низове, които излизат от базата данни, тъй като те вече са необработени низове. Не е необходимо да обработвате въведени низове (*), освен което и да е валидиране на специфично за приложението поле, което искате да направите.

*:добре, освен ако magic_quotes_gpc е включен, в който случай трябва или да stripslashes() всичко, което идва от get/post/cookie, или, любимата ми опция, веднага се проваля:

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. СУПЕР привилегия(и) за тази операция

  2. Как безопасно да вмъкнете код в mySQL база данни

  3. PHP код за вмъкване на стойност в квадратчето за отметка в конкретна колона на mysql с форма за избор

  4. Най-лесният начин за PHP връзка за проверка на имейл

  5. MySQLi count(*) винаги връща 1