Задавайте вопросы, мы ответим
Вы не зашли.
Меня интересует алгоритм работы mysql с экранирующими символами (косая черта \).
Работаю на php, поэтому вопрос связан с синтаксисом в php.
Вопросы:
1) Обязательно ли использовать обратный слеш для экранирования спецсимвлов и какие символы должны экранироваться?
2) можно ли отключить (например, администратором или при установке mysql) экранирование специсимволов? Т.е. если я напишу select * from tbl where a='10\' будет ли это восприниматься как ошибка, или прямо в таблице будет искаться точно такая строка "10\", в которой будет 10 и обратный слеш?
Если кратко можно сформулировать вопрос, то он заключается в том, как роль у обратного слеша в mysql запросах? Как он воспринимается mysql и есть ли настройки, управляющие этим поведением?
Отредактированно sito-corito (13.07.2010 18:45:35)
Неактивен
Роль — экранирование. Следующий за \ символ будет считаться ровно тем символом.
Т.е. \a — это a, а \\ — это \. При этом если там стоит апостроф, кавычка или символ
с кодом ноль, то эти символы теряют свои магические значения внутри строки.
Для того, чтобы не придумывать себе головную боль в PHP, используйте addslashes().
Неактивен
А какая роль такой кавычки ` в mysql-запросах?
Неактивен
В бэктики заключаются имена таблиц и столбцов, если они могут быть трактованы
как-то иначе (например, колонку `date` никаким другим способом не создашь).
Неактивен
В 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)
Неактивен
Разработчики 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.
Неактивен
С поведением все понятно. Интересно было бы увидеть ответ на вторую половину вопроса "есть ли настройки, управляющие этим поведением?"
Неактивен
Очевидно, нет, раз они не документированы
Неактивен