MySQL 转义反斜杠

发布于 2024-12-02 20:16:38 字数 567 浏览 1 评论 0原文

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

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

I have a series of regular expressions that include escape characters that I need to store in a mysql table.

If I don't escape the backslash, it is eliminated.

I have tried escaping the backslash in PHP using mysql_real_escape_string, addslashes, str_replace, and every time the database stores a double backslash rather than a single one.

I have also tried using sed in bash to escape the backslash, but it also prints 2.

Example:

$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

Any ideas as to what I am doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你好,陌生人 2024-12-09 20:16:38

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

The slashes are escaped in the mysql client's console output; not in the database ;)

Try running the client interactively:

mysql -uuser -Ddatabase -p'password'
mysql> select * from my_table;
+------------------------------------+
| x                                  |
+------------------------------------+
| stackoverflow\.com\/questions\/ask |
+------------------------------------+

And non-interactively:

mysql -uuser -Ddatabase -p'password' <<< "select * from my_table"
stackoverflow\\.com\\/questions\\/ask

Use --raw to disable this escaping:

mysql -uuser -Ddatabase -p'password' --raw <<< "select * from my_table"
stackoverflow\.com\/questions\/ask

From the manual:

--raw, -r

For tabular output, the “boxing” around columns enables one column value to be distinguished from another. For nontabular output (such as is produced in batch mode or when the --batch or --silent option is given), special characters are escaped in the output so they can be identified easily. Newline, tab, NUL, and backslash are written as \n, \t, \0, and \. The --raw option disables this character escaping.

BTW mysql_real_escape_string was the right escape function to use.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文