MySQL Escape Backslash - PullRequest
       20

MySQL Escape Backslash

2 голосов
/ 02 сентября 2011

У меня есть серия регулярных выражений, которые включают escape-символы, которые мне нужно сохранить в таблице mysql.

Если я не экранирую обратную косую черту, она исключается.

IЯ пытался избежать обратной косой черты в PHP, используя mysql_real_escape_string, addlashes, str_replace, и каждый раз, когда база данных хранит двойную обратную косую черту, а не одну.

Я также пытался использовать sed в bash, чтобы избежать обратной косой черты, но этотакже печатает 2.

Пример:

$regex = "stackoverflow\.com\/questions\/ask";
$query_text = addslashes($regex);
$query = "INSERT INTO my_table (url) VALUES ('$query_text')";

me@server:$ echo "select * from my_table" | mysql -uuser -Ddatabase -p'password'

stackoverflow\\.com\\/questions\\ask

Есть идеи о том, что я делаю неправильно?

1 Ответ

7 голосов
/ 02 сентября 2011

Косые черты экранированы в выводе консоли клиента mysql;отсутствует в базе данных;)

Попробуйте запустить клиент в интерактивном режиме:

mysql -uuser -Ddatabase -p'password'
mysql> select * from my_table;
+------------------------------------+
| x                                  |
+------------------------------------+
| stackoverflow\.com\/questions\/ask |
+------------------------------------+

И не в интерактивном режиме:

mysql -uuser -Ddatabase -p'password' <<< "select * from my_table"
stackoverflow\\.com\\/questions\\/ask

Используйте --raw, чтобы отключить эту экранировку:

mysql -uuser -Ddatabase -p'password' --raw <<< "select * from my_table"
stackoverflow\.com\/questions\/ask

Из руководства:

- raw, -r

Для табличного вывода «кадрирование» вокруг столбцов позволяет использовать значение одного столбцаотличается от другого.Для нетабличного вывода (например, производится в пакетном режиме или когда задана опция --batch или --silent), специальные символы экранируются в выводе, поэтому их можно легко идентифицировать.Символы новой строки, табуляция, NUL и обратная косая черта записываются как \ n, \ t, \ 0 и \.Опция - raw отключает экранирование этого символа.

Кстати, mysql_real_escape_string была правильной функцией перехода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...