Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Почему при вставке типа '\\d' в поле заноситься '\d'?
 
 автор: Саша   (29.07.2008 в 22:55)   письмо автору
 
 

Здравствуйте!

Проблема не сложная , могу и сам найти решение, но время поджимает

update forms set reg_exp = '\\d+' where id=12

врезультате в поле reg_exp '\d+'. Как заставить внести мускл так как я ему говорю.
Спс!

  Ответить  
 
 автор: Trianon   (29.07.2008 в 23:00)   письмо автору
 
   для: Саша   (29.07.2008 в 22:55)
 

update forms set reg_exp = '\\\\d+' where id=12


Читайте правила записи текстовых литералов.
Спецсимволы следует экранировать.
\ - спецсимвол.

  Ответить  
 
 автор: Саша   (29.07.2008 в 23:10)   письмо автору
 
   для: Trianon   (29.07.2008 в 23:00)
 

да, но получается нужно 2 раза екранировать. А если в строке ', то получится \\\' и при удалении и отображении получится строка \' а не трбуемая '. Т.е. вставляемая строка уже экранирована из рнр скрипта и при отображении она stripslashes покажет \'

  Ответить  
 
 автор: Trianon   (29.07.2008 в 23:15)   письмо автору
 
   для: Саша   (29.07.2008 в 23:10)
 

Где два раза?
Два слэша в строке. Перед каждым ставим экранирующий слэш. Один раз.
Перед апострофом тоже ставим слэш. Тоже один. Потому что апостроф - тоже спецсимвол.
Что значит - экранирована из скрипта ?
SQL НЕ знает, откуда к нему данные идут. НЕ хочет, и НЕ БУДЕТ знать.

  Ответить  
 
 автор: Саша   (29.07.2008 в 23:21)   письмо автору
 
   для: Trianon   (29.07.2008 в 23:15)
 

скрипт экранирует символы и он уже формирует строку типа
update forms set reg_exp = '\\d+\'' where id=12 . А при вставке получается '\d+\''. Потом скрипт вытягивает данные делая уже stripslashes и выходит 'd+''

Вроде раньше такой проблемы не было пока мускл не обновил

  Ответить  
 
 автор: Trianon   (29.07.2008 в 23:33)   письмо автору
 
   для: Саша   (29.07.2008 в 23:21)
 

>Потом скрипт вытягивает данные делая уже stripslashes

Это еще зачем?

>Вроде раньше такой проблемы не было пока мускл не обновил

Наверное обновили не только MySQL.

  Ответить  
 
 автор: Саша   (29.07.2008 в 23:38)   письмо автору
 
   для: Trianon   (29.07.2008 в 23:33)
 

Ну если экранировали символы, то как бы потом надобы их вернуть в прежнюю форму, а то не красиво когда O\'conor отображается на экране монитора )

  Ответить  
 
 автор: Trianon   (29.07.2008 в 23:49)   письмо автору
 
   для: Саша   (29.07.2008 в 23:38)
 

>Ну если экранировали символы, то как бы потом надобы их вернуть в прежнюю форму, а то не красиво когда O\'conor отображается на экране монитора )

Бред. Экранирование носит исключительно транспортный характер. Строку вернет в прежнюю форму сам сервер БД, как только её получит, еще до записи в таблицу.

  Ответить  
 
 автор: Саша   (30.07.2008 в 00:00)   письмо автору
 
   для: Trianon   (29.07.2008 в 23:49)
 

так вот почему то не возвращает. Сервер просто убирает слэш и вместо вставлемого '\\d+' в ячейке видно '\d+'.

Конкретно, если я даже вручную исполняю запрос update forms set reg_exp = '\\d+' where id=12, то будет врезультате reg_exp = '\d+', а нужно все таки '\\d+'.

  Ответить  
 
 автор: BinLaden   (30.07.2008 в 00:16)   письмо автору
 
   для: Саша   (30.07.2008 в 00:00)
 

Покажите не только сам запрос, но и то, как Вы его оформляете в PHP-коде.

  Ответить  
 
 автор: Саша   (30.07.2008 в 00:35)   письмо автору
 
   для: BinLaden   (30.07.2008 в 00:16)
 

а какая разница как офрмляю? Возможно я ошибаюсь, но важно то что на выходе получается. А на выходе как раз все ок, т.е. возвращается строка update forms set reg_exp = '\\d+' where id=12, reg_exp должна вот в таком виде попасть в базу. Но мускл розэкранирует его перед вставкой, чего совсем не нужно.

  Ответить  
 
 автор: BinLaden   (30.07.2008 в 01:42)   письмо автору
 
   для: Саша   (30.07.2008 в 00:35)
 

> а какая разница как офрмляю?

Наблюдая за Вашими постами, я (возможно и несправедливо) сделал вывод, что Вы толком не понимаете что такое экранирование. Поэтому очень важно посмотреть как оформляется строка запроса. Как одна литеральная константа или значение для reg_exp находится в переменной? Если переменная, то откуда она берется? Если от пользователя, то необходимо при включенном magic_quotes_gpc удалить поставленные этим механизмом слеши. А потом при формировании запроса применить mysql_escape_string() к значению данной переменной. И в таблице будет именно то, что было изначально в переменной.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования