Php MySQL转义反斜杠
我有一系列正则表达式,其中包括我需要存储在mysql表中的转义字符 如果我不避开反斜杠,它将被消除 我曾尝试使用mysql\u real\u escape\u string、addslashes、str\u replace在PHP中转义反斜杠,每次数据库存储一个双反斜杠而不是一个 我还尝试在bash中使用sed来避开反斜杠,但它也会打印2 例如:Php MySQL转义反斜杠,php,mysql,bash,escaping,backslash,Php,Mysql,Bash,Escaping,Backslash,我有一系列正则表达式,其中包括我需要存储在mysql表中的转义字符 如果我不避开反斜杠,它将被消除 我曾尝试使用mysql\u real\u escape\u string、addslashes、str\u replace在PHP中转义反斜杠,每次数据库存储一个双反斜杠而不是一个 我还尝试在bash中使用sed来避开反斜杠,但它也会打印2 例如: $regex = "stackoverflow\.com\/questions\/ask"; $query_text = addslashes($re
$regex = "stackoverflow\.com\/questions\/ask";
$query_text = addslashes($regex);
$query = "INSERT INTO my_table (url) VALUES ('$query_text')";
你知道我做错了什么吗?斜杠会在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
和非交互方式:
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
从手册中:
--原始,-r
对于表格输出,围绕列的“装箱”可使一个列值与另一个列值区分开来。对于非tabular输出(例如在批处理模式下生成的输出,或者在给定--batch或--silent选项时生成的输出),将在输出中转义特殊字符,以便轻松识别它们。换行符、制表符、NUL和反斜杠写为\n、\t、\0和\。--raw选项禁用此字符转义
顺便说一句,mysql\u real\u escape\u string是正确的转义函数。有用的链接-只使用
mysql\u real\u escape\u string
来转义数据库中注入的$vars,永远不要将其组合或替换为任何其他或更好的函数,使用PDO。太好了,这就是问题所在。有趣的是,我有一个explode()将字符串分解成数组。如果我使用mysql\u real\u escape\u字符串($array[1]),它根本不会转义。相反,我能够在explode()之前对mysql\u real\u escape\u字符串进行解压,而且效果很好。谢谢你的回复。