首页 > 数据库 > mysql教程 > 如何安全地转义 MySQL 特殊字符(包括通配符)以进行数据库插入?

如何安全地转义 MySQL 特殊字符(包括通配符)以进行数据库插入?

Mary-Kate Olsen
发布: 2024-12-07 07:11:11
原创
667 人浏览过

How Can I Safely Escape MySQL Special Characters, Including Wildcards, for Database Insertion?

转义数据库插入的 MySQL 特殊字符

将用户输入插入 MySQL 数据库时,通过正确转义特殊字符来防止潜在漏洞至关重要人物。 PHP 函数 mysql_real_escape_string 可以有效地处理此任务,但它不会转义 MySQL 通配符 % 和 _。

为了解决这个问题,许多开发人员将 addcslashes 函数与 mysql_real_escape_string 结合使用来转义这些通配符。然而,这种方法可能会导致意想不到的结果。

了解 MySQL 中的通配符转义

与普遍看法相反,在 MySQL 中,_ 和 % 不被视为通用字符串的通配符文字。它们仅应在 LIKE 语句中用于模式匹配时进行转义。

转义的层次结构

在 LIKE 语句上下文中转义特殊字符涉及两个级别:

  1. LIKE 逃脱: 在 LIKE 内语句、_ 和 % 必须与转义字符一起转义。转义字符本身也必须进行转义。
  2. 字符串文字转义: LIKE 转义之后,字符串必须根据特定数据库的要求进行常规字符串文字转义。对于 MySQL,这是使用 mysql_real_escape_string 完成的。

双反斜杠的混乱

MySQL 使用反斜杠字符作为 LIKE 转义和字符串的转义字符字面意义上的逃避。这可能会导致混乱,如插入包含 % 的字符串时所见。必须使用双反斜杠对其进行转义以实现 LIKE 目的,然后必须再次对整个字符串进行转义以进行字符串文字插入。

ANSI SQL 和可移植 LIKE 转义

ANSI SQL 定义字符串文字中的反斜杠代表文字反斜杠,单引号使用 '' 进行转义。然而,MySQL 偏离了这个标准。为了确保可移植性,建议覆盖 MySQL 的默认行为并使用 LIKE ... ESCAPE ... 构造指定自定义转义字符。例如:

function like($s, $e) {
    return str_replace(array($e, '_', '%'), array($e.$e, $e.'_', $e.'%'), $s);
}

$escapedname = mysql_real_escape_string(like($name, '='));
$query = "... WHERE name LIKE '%$escapedname%' ESCAPE '=' AND ...";
登录后复制

以上是如何安全地转义 MySQL 特殊字符(包括通配符)以进行数据库插入?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板