magic_quotes

Anton63

Новичок
magic_quotes

Делаю проверку
PHP:
$head = $_POST[head];
if(!get_magic_quotes_gpc())
  $head = addslashes($head);
Затем вставляю $head в базу данных, но в БД всё равно переменная не экранированна.

В php.ini всё выключено:
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off

В чём дело? Почему в БД переменная не экранирована???
 

phprus

Moderator
Команда форума
Anton63
А зачем в базе то хранить экранированное значение?
 

Anton63

Новичок
Прочитал, вроде понял... сделал так:
PHP:
$head = $_POST[head];
  if(!get_magic_quotes_gpc())
$head = mysql_real_escape_string($head);
Значит $head экранируется только при sql запросе, а в БД хранится не экранированная. И при выводе функция stripslashes() не нужна... Всё правильно???

-~{}~ 26.08.09 16:59:

phprus, я думал так и должно быть... т.е. если при запросе в БД переменную заэкранировали, то и в БД она должна быть заэкранирована...
 

dimagolov

Новичок
Anton63, нет, ты не понял. magic_quotes экранируют криво, поэтому если magic_quotes работают, то их экранирование надо убрать, а нужное (например mysql_real_escape_string при вставке строки в запрос к MySQL) выполнить. в статье по ссылке об этом написано, откуда ты взял тот бред, что написал непонятно.
 

phprus

Moderator
Команда форума
Anton63
phprus, я думал так и должно быть... т.е. если при запросе в БД переменную заэкранировали, то и в БД она должна быть заэкранирована...
Нет, экранирование предназначено для того, чтобы сделать запрос синтаксически верным (если в данных встречаются служебные для языка запросов символы) и чтобы в БД попали данные, которые ты туда хочешь записать.

Значит $head экранируется только при sql запросе, а в БД хранится не экранированная. И при выводе функция stripslashes() не нужна... Всё правильно???
Да, все правильно.
 
Сверху