首页 >后端开发 >php教程 >为什么 MySQL 中 `addcslashes` 转义下划线的方式不同?

为什么 MySQL 中 `addcslashes` 转义下划线的方式不同?

Barbara Streisand
Barbara Streisand原创
2024-11-08 15:24:021086浏览

Why Does `addcslashes` Escape Underscores Differently in MySQL?

转义 MySQL 通配符:解决下划线之谜

在 MySQL 中,通配符和特殊字符,如下划线 (_) 和百分号 (%当用户输入发送到数据库时,可能会产生逃避挑战。 PHP 函数 mysql_real_escape_string 可以处理大多数转义需求,但它不能扩展到 _ 和 %。因此,有些人可能会求助于使用 addcslashes 来进一步转义这些字符。

但是,出现了一个令人困惑的问题:当用户输入包含下划线时,通过 addcslashes 运行它不会产生转义的下划线。从数据库中检索。例如,如果发送“test_test " ',然后检索,结果显示“test_test " '”带有转义的下划线。问题是,为什么下划线转义与使用相同方法转义的其他字符不同?

答案在于,_ 和 % 在一般 MySQL 用法中不是通配符,它​​们只有在 LIKE 语句中使用时才变得特殊,必须对它们进行转义以匹配其文字。要对 LIKE 语句中使用的字符进行转义,必须采用嵌套转义过程。

首先,字符串必须在 SQL 查询中进行 LIKE 转义。在此上下文中,_ 和 % 是特殊的且必须。即使使用参数化查询,也应与转义字符本身一起显式转义。

一旦 LIKE 转义完成,字符串必须是再次转义以用于 SQL 之外的常规字符串。这就是 mysql_real_escape_string 发挥作用的地方。

之所以会出现混乱,是因为 MySQL 使用反斜杠 () 作为转义的两个阶段的转义字符。为了说明这一点,要在 LIKE 语句中找到百分号的精确匹配,需要对字符串进行双反斜杠转义:`LIKE 'something%''。但是,ANSI SQL 规定,在字符串文字中,反斜杠代表文字反斜杠,而引号 (') 字符应进行转义而不是反斜杠。

为了避免特定于平台的问题,建议覆盖 LIKE 中的默认转义行为语句并使用 LIKE ... ESCAPE ... 构造定义自定义转义字符。

以上是为什么 MySQL 中 `addcslashes` 转义下划线的方式不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn