問題:
使用mysql_real_escape_string SQL某些角色的意外行為。具體來說,底線字元前面有反斜杠,而單引號和雙引號則沒有。
解釋:
與假設相反, 和% 是不是一般用法中的MySQL 通配符,並且在將它們插入字串文字時不應進行轉義。 mysql_real_escape_string 足以達到此目的,並且應避免為 和 % 添加 addcslashes。
通配符僅在 LIKE 匹配的上下文中變得相關。當字串表示為文字 LIKE 表達式時,需要額外的轉義層,其中 _ 和 % 必須轉義。這是與使用相同反斜線字元的一般字串轉義分開完成的。
解決方案:
對於LIKE 匹配,請按照以下步驟操作:
範例:
要配對文字百分號,請使用雙反斜線以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中文網其他相關文章!