MySQL « Экранирование кавычек в MySQL

Здраствуйте! Интересует такой вопрос - когда в MySQL таблицу пытаюсь вставить данные с экранированными кавычками, то в итоге я получаю в таблицу запись, где все обратные слеши просто исчезли!
Пример:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .sql.geshi_code {font-family:monospace;} .sql.geshi_code .imp {font-weight: bold; color: red;} .sql.geshi_code .kw1 {color: #993333; font-weight: bold;} .sql.geshi_code .co1 {color: #808080; font-style: italic;} .sql.geshi_code .co2 {color: #808080; font-style: italic;} .sql.geshi_code .coMULTI {color: #808080; font-style: italic;} .sql.geshi_code .es0 {color: #000099; font-weight: bold;} .sql.geshi_code .br0 {color: #66cc66;} .sql.geshi_code .sy0 {color: #66cc66;} .sql.geshi_code .st0 {color: #ff0000;} .sql.geshi_code .nu0 {color: #cc66cc;} .sql.geshi_code span.xtra { display:block; }

INSERT INTO TABLE VALUES('здесь ' экранированная кавычка');
 

то в базе у меня будет/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .sql.geshi_code {font-family:monospace;} .sql.geshi_code .imp {font-weight: bold; color: red;} .sql.geshi_code .kw1 {color: #993333; font-weight: bold;} .sql.geshi_code .co1 {color: #808080; font-style: italic;} .sql.geshi_code .co2 {color: #808080; font-style: italic;} .sql.geshi_code .coMULTI {color: #808080; font-style: italic;} .sql.geshi_code .es0 {color: #000099; font-weight: bold;} .sql.geshi_code .br0 {color: #66cc66;} .sql.geshi_code .sy0 {color: #66cc66;} .sql.geshi_code .st0 {color: #ff0000;} .sql.geshi_code .nu0 {color: #cc66cc;} .sql.geshi_code span.xtra { display:block; }

здесь ' экранированная кавычка


Подскажите плиз, где в mysql настроить или что, чтобы экранирование не убиралось (пускай уж лучше в базе с слешами хранится)

1 ответов


Экранирование теряется во время "компиляции" строки. Используйте Wrapper, который все сделает сам - заэкранирует то, что надо и будет сохранять в базе ровно ту строку, которая будет дана.

К примеру есть такие функции, вроде mysql_real_escape_string:


$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));
 

А вообще, если вы пользуетесь голыми операциями с mySQL, то, может вас заинтересует mySQL врапперы, которые сведут ваши проблемы на "нет"?

Не совсем понимаю вопрос. Если слеш и кавычка должны храниться в таблице, что мешает экранировать слеш?


INSERT INTO TABLE VALUES('здесь \\\' экранированная кавычка');
Вставит
здесь \' экранированная кавычка


Еще небольшое замечание - если Вы используете PHP и Вам нужен ответ по Mysql +PHP, то указывайте PHP в тагах или хотя бы в вопросе (все таки PHP не плагин к Mysql :) )