在 MySQL 中,在查詢中處理斜線 () 可以令人困惑。考慮以下查詢:
<code class="sql">(SELECT * FROM `titles` where title = 'test\') UNION ALL (SELECT * FROM `titles` where title LIKE 'test\\')</code>
您可能會期望使用 LIKE 子句的第二個查詢需要額外的反斜線來轉義「test」中的原始斜線。然而,結果顯示,兩個查詢都成功傳回同一行,標題為「test」。
出現差異的原因是 MySQL 在 WHERE 和 LIKE 子句中使用轉義字元的行為。在 WHERE 子句中,反斜線用作轉義字符,保護特殊字符不被字面解釋。相反,在 LIKE 子句中,反斜線是預設的轉義字符,可讓您轉義搜尋模式中的其他字符。
如MySQL 手冊中有關LIKE 的所述:
;「因為MySQL 在字串中使用C 轉義語法...您必須將LIKE 字串中使用的任何”加倍。例如,要搜尋“n”,請將其指定為“\n”。 」
因此,雖然「test」中的反斜線在解析WHERE 子句時會自動轉義,但必須明確加倍(為「test\」)以使LIKE 子句符合預期的轉義序列。 >
透過將反斜線替換為管道字符作為轉義字符,您可以準確搜尋字面量“test”,而無需加倍反斜線。
以上是為什麼我需要在 MySQL 的 WHERE 和 LIKE 子句中以不同的方式轉義斜線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!