|
|
|
| Здравствуйте!
Проблема не сложная , могу и сам найти решение, но время поджимает
update forms set reg_exp = '\\d+' where id=12
врезультате в поле reg_exp '\d+'. Как заставить внести мускл так как я ему говорю.
Спс! | |
|
|
|
|
|
|
|
для: Саша
(29.07.2008 в 22:55)
| |
update forms set reg_exp = '\\\\d+' where id=12
|
Читайте правила записи текстовых литералов.
Спецсимволы следует экранировать.
\ - спецсимвол. | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 23:00)
| | да, но получается нужно 2 раза екранировать. А если в строке ', то получится \\\' и при удалении и отображении получится строка \' а не трбуемая '. Т.е. вставляемая строка уже экранирована из рнр скрипта и при отображении она stripslashes покажет \' | |
|
|
|
|
|
|
|
для: Саша
(29.07.2008 в 23:10)
| | Где два раза?
Два слэша в строке. Перед каждым ставим экранирующий слэш. Один раз.
Перед апострофом тоже ставим слэш. Тоже один. Потому что апостроф - тоже спецсимвол.
Что значит - экранирована из скрипта ?
SQL НЕ знает, откуда к нему данные идут. НЕ хочет, и НЕ БУДЕТ знать. | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 23:15)
| | скрипт экранирует символы и он уже формирует строку типа
update forms set reg_exp = '\\d+\'' where id=12 . А при вставке получается '\d+\''. Потом скрипт вытягивает данные делая уже stripslashes и выходит 'd+''
Вроде раньше такой проблемы не было пока мускл не обновил | |
|
|
|
|
|
|
|
для: Саша
(29.07.2008 в 23:21)
| | >Потом скрипт вытягивает данные делая уже stripslashes
Это еще зачем?
>Вроде раньше такой проблемы не было пока мускл не обновил
Наверное обновили не только MySQL. | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 23:33)
| | Ну если экранировали символы, то как бы потом надобы их вернуть в прежнюю форму, а то не красиво когда O\'conor отображается на экране монитора ) | |
|
|
|
|
|
|
|
для: Саша
(29.07.2008 в 23:38)
| | >Ну если экранировали символы, то как бы потом надобы их вернуть в прежнюю форму, а то не красиво когда O\'conor отображается на экране монитора )
Бред. Экранирование носит исключительно транспортный характер. Строку вернет в прежнюю форму сам сервер БД, как только её получит, еще до записи в таблицу. | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 23:49)
| | так вот почему то не возвращает. Сервер просто убирает слэш и вместо вставлемого '\\d+' в ячейке видно '\d+'.
Конкретно, если я даже вручную исполняю запрос update forms set reg_exp = '\\d+' where id=12, то будет врезультате reg_exp = '\d+', а нужно все таки '\\d+'. | |
|
|
|
|
|
|
|
для: Саша
(30.07.2008 в 00:00)
| | Покажите не только сам запрос, но и то, как Вы его оформляете в PHP-коде. | |
|
|
|
|
|
|
|
для: BinLaden
(30.07.2008 в 00:16)
| | а какая разница как офрмляю? Возможно я ошибаюсь, но важно то что на выходе получается. А на выходе как раз все ок, т.е. возвращается строка update forms set reg_exp = '\\d+' where id=12, reg_exp должна вот в таком виде попасть в базу. Но мускл розэкранирует его перед вставкой, чего совсем не нужно. | |
|
|
|
|
|
|
|
для: Саша
(30.07.2008 в 00:35)
| | > а какая разница как офрмляю?
Наблюдая за Вашими постами, я (возможно и несправедливо) сделал вывод, что Вы толком не понимаете что такое экранирование. Поэтому очень важно посмотреть как оформляется строка запроса. Как одна литеральная константа или значение для reg_exp находится в переменной? Если переменная, то откуда она берется? Если от пользователя, то необходимо при включенном magic_quotes_gpc удалить поставленные этим механизмом слеши. А потом при формировании запроса применить mysql_escape_string() к значению данной переменной. И в таблице будет именно то, что было изначально в переменной. | |
|
|
|