转义数据库插入的 MySQL 特殊字符
将用户输入插入 MySQL 数据库时,通过正确转义特殊字符来防止潜在漏洞至关重要人物。 PHP 函数 mysql_real_escape_string 可以有效地处理此任务,但它不会转义 MySQL 通配符 % 和 _。
为了解决这个问题,许多开发人员将 addcslashes 函数与 mysql_real_escape_string 结合使用来转义这些通配符。然而,这种方法可能会导致意想不到的结果。
了解 MySQL 中的通配符转义
与普遍看法相反,在 MySQL 中,_ 和 % 不被视为通用字符串的通配符文字。它们仅应在 LIKE 语句中用于模式匹配时进行转义。
转义的层次结构
在 LIKE 语句上下文中转义特殊字符涉及两个级别:
双反斜杠的混乱
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中文网其他相关文章!