以前沒特別留意,只知道需要跳脫單引號、雙引號和反斜線。最近做了一個專案,才發現以前的認知有點落差…
PHP 提供的處理函式 mysqli_real_escape_string() 有跳脫部份字元: NUL
(ASCII 0), \n
, \r
, \
, '
, "
, ^Z
。
在 MySQL LIKE 的說明中,清楚指出可以用 %
和 _
做為特殊字元搜尋,因此要搜尋原本的 %
和 _
必須加上反斜線,也就是 \%
和 \_
。上面提到的 mysqli_real_escape_string() 沒有做這件事,所以要自己跳脫。
說明中也特別指出這次搞混的部份:當需要在 LIKE
中搜尋原本的 \
字元時,必須做雙重跳脫,也就是 \\\\
才行。
另外也找到了欄位跳脫的方式:重覆一次反引號 `
而不是加反斜線。
範例:
SELECT * FROM `data` WHERE `repeat``s` LIKE '%/\_\\\\blah%'
文章標籤
全站熱搜
留言列表