MySQL Escape反斜杠

时间:2011-09-02 18:19:24

标签: php mysql bash escaping backslash

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

如果我没有逃避反斜杠,就会被淘汰。

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

我也尝试在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

关于我做错了什么的想法?

1 个答案:

答案 0 :(得分:7)

斜杠在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 选项禁用此字符转义。

BTW mysql_real_escape_string是正确使用的转义函数。