以前沒特別留意,只知道需要跳脫單引號、雙引號和反斜線。最近做了一個專案,才發現以前的認知有點落差…

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%'

文章標籤
創作者介紹

旅行的記憶

repeat<')">< 發表在 痞客邦 PIXNET 留言(0) 人氣()