MySQL Escape Backslash


MySQL Escape Backslash

我有一系列正则表达式,其中包括转义字符,我需要存储在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

有什么想法,我做错了吗?

斜杠在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是正确的转义函数。