首頁 >資料庫 >mysql教程 >如何安全地轉義 MySQL 特殊字元(包括通配符)以進行資料庫插入?

如何安全地轉義 MySQL 特殊字元(包括通配符)以進行資料庫插入?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-07 07:11:11663瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn