SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.07.2010 18:44:21

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Экранирующие символы при вставке данных

Меня интересует алгоритм работы mysql  с экранирующими символами (косая черта \).
Работаю на php, поэтому вопрос связан с синтаксисом в php.
Вопросы:
1) Обязательно ли использовать обратный слеш для экранирования спецсимвлов и какие символы должны экранироваться?

2) можно ли отключить (например, администратором или при установке mysql) экранирование специсимволов? Т.е. если я напишу select * from tbl where a='10\' будет ли это восприниматься как ошибка, или прямо в таблице будет искаться точно такая строка "10\", в которой будет 10 и обратный слеш?

Если кратко можно сформулировать вопрос, то он заключается в том, как роль у обратного слеша в mysql запросах? Как он воспринимается mysql и есть ли настройки, управляющие этим поведением?

Отредактированно sito-corito (13.07.2010 18:45:35)

Неактивен

 

#2 13.07.2010 20:40:45

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Экранирующие символы при вставке данных

Роль — экранирование. Следующий за \ символ будет считаться ровно тем символом.
Т.е. \a — это a, а \\ — это \. При этом если там стоит апостроф, кавычка или символ
с кодом ноль, то эти символы теряют свои магические значения внутри строки.

Для того, чтобы не придумывать себе головную боль в PHP, используйте addslashes().

Неактивен

 

#3 15.07.2010 18:19:29

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: Экранирующие символы при вставке данных

А какая роль такой кавычки ` в mysql-запросах?

Неактивен

 

#4 15.07.2010 18:21:45

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Экранирующие символы при вставке данных

В бэктики заключаются имена таблиц и столбцов, если они могут быть трактованы
как-то иначе (например, колонку `date` никаким другим способом не создашь).

Неактивен

 

#5 30.08.2010 18:46:48

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: Экранирующие символы при вставке данных

В PHP есть одна функция http://php.net/manual/en/function.mysql … string.php
На русском про функцию можно прочитать здесь: http://www.php.ru/manual/function.mysql … tring.html. Для чего он нужна (она экранирует специальные символы \x00, \n, \r, \, ', " и \x1a)? С кавычками понятно - они нужны для того, чтобы обезопасить от sql инъекций. А для чего экранировать спецсимволы вроде \n? Когда нужно применять эту функцию, а когда addslashes()? Подскажите, пожалуйста.
Если спецсимвол \n помещается в базу, то он так туда и поместиться. А если помещать \\n, то что это тогда в базе будет?

Отредактированно sito-corito (30.08.2010 18:50:44)

Неактивен

 

#6 30.08.2010 21:51:26

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Экранирующие символы при вставке данных

Разработчики PHP — обычные люди. Когда они портируют библиотеку, они не читают
документацию, они работают в режиме робота. А вот в документации написано:

Strictly speaking, MySQL requires only that backslash and the quote character used to
quote the string in the query be escaped. This function quotes the other characters to make
them easier to read in log files.

Неактивен

 

#7 15.12.2010 22:48:51

NT Man
Участник
Зарегистрирован: 07.06.2008
Сообщений: 16

Re: Экранирующие символы при вставке данных

С поведением все понятно. Интересно было бы увидеть ответ на вторую половину вопроса "есть ли настройки, управляющие этим поведением?"

Неактивен

 

#8 17.12.2010 15:18:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Экранирующие символы при вставке данных

Очевидно, нет, раз они не документированы wink

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson