【问题标题】:MySQL Escape BackslashMySQL 转义反斜杠
【发布时间】:2011-11-09 09:37:44
【问题描述】:

我有一系列正则表达式,其中包含我需要存储在 mysql 表中的转义字符。

如果我不转义反斜杠,它就会被消除。

我曾尝试在 PHP 中使用 mysql_real_escape_string、addslashes、str_replace 转义反斜杠,并且每次数据库存储双反斜杠而不是单个反斜杠时。

我也尝试在 bash 中使用 sed 来转义反斜杠,但它也会打印 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

关于我做错了什么有什么想法吗?

【问题讨论】:

标签: php mysql bash escaping backslash


【解决方案1】:

斜线在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

来自手册:

--原始,-r

对于表格输出,列周围的“装箱”可以将一个列值与另一列值区分开来。对于非表格输出(例如以批处理模式生成或给出 --batch 或 --silent 选项时),输出中的特殊字符会被转义,以便轻松识别它们。换行符、制表符、NUL 和反斜杠写为 \n、\t、\0 和 \。 --raw 选项禁用此字符转义。

顺便说一句,mysql_real_escape_string 是正确的转义函数。

【讨论】:

  • 太好了,这就是问题所在。有趣的是,虽然我有一个 explode() 来将字符串分解成一个数组。如果我 mysql_real_escape_string($array[1]) 它根本不会逃脱。相反,我能够在explode()之前使用mysql_real_escape_string,它工作正常。感谢您的回复。
猜你喜欢
  • 2015-05-19
  • 2015-09-21
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多