За последние 24 часа нас посетили 17866 программистов и 1586 роботов. Сейчас ищут 964 программиста ...

escape_string VS real_escape_string VS addslashes VS quotes

Тема в разделе "Прочее", создана пользователем Ensiferum, 7 фев 2011.

  1. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    Навеяло парой топиков...

    Кто чем пользуется? Что по вашему лучше?
    Для затравочки статья http://www.phpfaq.ru/slashes#off
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    addshasles не учитывает специфику mysql, mysql_escape_string содержит потенциальные баги и поэтому deprecated, функция mysql_real_escape_string единственно правильный вариант.
     
  3. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    препады рулят, никакой escape не нужен :)
     
  4. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    в чем заключена специфика?
     
  5. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Имею мнение, что волшебные кавычки - зло.
    В принципе, функции addslashes хватает, если работать в UTF-8.
     
  6. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    а если не используешь PDO или Mysqli?
     
  7. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    А почему зло? поделись мнением
     
  8. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    [​IMG]
     
  9. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Ensiferum
    потому что не всякие данные идут в базу, чтобы их эскейпить.
    как заметил Vladson, надо эскейпить только те данные,
    которые идут в базу, а эскейпить всё подряд - глупо.

     
  10. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    А потому что на форумах читал что они зло... =)
    А если у бабушки был бы х%:* то ?
     
  11. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Эскейпить надо не данные, данные вообще менять нельзя. Никогда и никаким образом...

    © http://dkflbk.nm.ru/php_basic_err_1.html

    Так что bin2hex рулит :)
     
  12. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    то она стала бы дедушкой)
     
  13. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    Это сурьёзный аргумент!

    Ну допустим нет PDO в PHP, да и в 5.3 стандартный mysql перебрали так, что по скорости соревнуется с расширениями.

    туше!
     
  14. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    А сейчас - рекламная пауза! [​IMG]
     
  15. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    У меня на кровати нет колёс, по этому я не ездию на ней на работу :)
     
  16. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    Vladson
    не, скучно, скучно! Давай больше экспрессии!!! я верю в тебя!
     
  17. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    Vladson
    использую ctype_digit для чисел

    что лучше?
     
  18. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    где об этом можно почитать?
     
  19. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    Gromo
    конкретной статьи не встречал
     
  20. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    ctype_digit лучше для тех случаях где надо положительное число, и numeric где отрицательные тоже (в том примере ctype лучше, но когда я ту фигню писал я забыл об этом, а править лень)

    А по теме я кстати bin2hex использовал в некоторых скриптах
    Один из примеров тут http://www.php.ru/forum/viewtopic.php?p=244105#244105
    Код (Text):
    1. mysql_query("INSERT INTO `guestbook` VALUES (NOW(), '$username', 0x".bin2hex($_POST['text']).")");
     
  21. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Ensiferum
    Код (Text):
    1. Строка из секции from кодируется в экранированную SQL-строку, принимая во внимание текущую кодировку данного соединения. Результат помещается в секцию to с добавлением концевого нулевого байта. Кодируются следующие символы: NUL (ASCII 0), `\n', `\r', `\', `'', `"' и Ctrl-Z
    это во-первых, во-вторых mysql_real_escape_string() это функция не для безопасности, а для корректной обработки запроса, никто не может поручиться что в следующей версии мускла не добавятся еще какие-то символы, которые mysql_real_escape_string() будет подхватывать, в то время как самопал нужно будет допиливать.

    тема непонятна, как можно сравнивать спец-функцию базы (которая может меняться в версиях продукта) и addslashes?
     
  22. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    antonn
    однако их сравнивают. не раз натыкался здесь же в разных топиках. так шо всё свалил в кучу и вопрошаю
     
  23. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Тема задумывалась как "холиварная" но увы хороших троллей нету... =D
     
  24. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Просто не все читают справку то именно делает mysql_real_escape_string() и часто вопрос звучит "как сделать кавычки в тексте для запроса", имхо.
    К тому же если какие-то балбесы сравнивают их это не значит что мы должны как попугаи повторяться =)
     
  25. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    PHP:
    1.  
    2. <?php
    3. private function prepareParams($params) {
    4.         if (is_array($params)) {
    5.             foreach ($params as &$param) {
    6.                 $param = $this->prepareParams($param);
    7.             }
    8.         } else {
    9.             if (is_string($params)) {
    10.                 return "'" . $this->real_escape_string($params) . "'";
    11.             } elseif (is_bool($params)) {
    12.                 return $params ? 1 : 0;
    13.             } elseif (is_null($params)) {
    14.                 return 'NULL';
    15.             }
    16.         }
    17.  
    18.         return $params;
    19.     }
    20.