Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL转义反斜杠_Php_Mysql_Bash_Escaping_Backslash - Fatal编程技术网

Php MySQL转义反斜杠

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

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

如果我不避开反斜杠,它将被消除

我曾尝试使用mysql\u real\u escape\u string、addslashes、str\u replace在PHP中转义反斜杠,每次数据库存储一个双反斜杠而不是一个

我还尝试在bash中使用sed来避开反斜杠,但它也会打印2

例如:

$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字符串进行解压,而且效果很好。谢谢你的回复。