首頁  >  文章  >  後端開發  >  為什麼 MySQL 轉義通配符會出現意外行為?

為什麼 MySQL 轉義通配符會出現意外行為?

DDD
DDD原創
2024-11-07 08:25:03696瀏覽

Why is MySQL Escaping Wildcards Behaving Unexpectedly?

了解MySQL 轉義通配符

問題:

使用mysql_real_escape_string SQL某些角色的意外行為。具體來說,底線字元前面有反斜杠,而單引號和雙引號則沒有。

解釋:

與假設相反, 和% 是不是一般用法中的MySQL 通配符,並且在將它們插入字串文字時不應進行轉義。 mysql_real_escape_string 足以達到此目的,並且應避免為 和 % 添加 addcslashes。

通配符僅在 LIKE 匹配的上下文中變得相關。當字串表示為文字 LIKE 表達式時,需要額外的轉義層,其中 _ 和 % 必須轉義。這是與使用相同反斜線字元的一般字串轉義分開完成的。

解決方案:

對於LIKE 匹配,請按照以下步驟操作:

  1. 使用LIKE轉義,其中_和%必須轉義,轉義字符也必須轉義。
  2. 使用MySQL中的mysql_real_escape_string或其他資料庫的適當函數執行一般字串轉義。

範例:

要配對文字百分號,請使用雙反斜線以LIKE 轉義(例如,MySQL 中的LIKE 'something\ %')或使用不同的轉義具有LIKE ... ESCAPE ... 構造的可移植性。

可移植的 LIKE 轉義函數:

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