2012-01-05 39 views
1

我有一個搜索我的數據庫SQL語句如何獲取sql語句來搜索百分號?

"SELECT catelogue.ARTIST, catelogue.TITLE, catelogue.`CAT NO.`, 
catelogue.FORMAT,catelogue.`IMAGE PATH` 
FROM catelogue 
WHERE catelogue.TITLE LIKE '%$search%'" 

現在我在SQL明白,你的百分比是你的通配符,但我現在需要的搜索來搜索100%,夏天,因爲這是一個CD的標題。

有沒有辦法做到這一點,以便百分號不影響我的其他通配符?

編輯:

所以,如果我用這個

$search = addcslashes(mysql_real_escape_string($search), '%_'); 

有那麼任何需要更換浸漬

$search = preg_replace("/[^a-zA-Z 0-9\/\\+\.,:?-]+/", "", $search) 

而且可以浸漬料替換爲mysql_real_escape_string一起使用?

回答

3

\%是一個轉義的「%」字符。

編輯

PHP:

$search = "100\% Summer"; 

在一般使用string addcslashes (string $str , string $charlist)

$search = "100% Summer"; 
$search = addcslashes($search, '%_'); 

不要忘了使用string mysql_real_escape_string (string $unescaped_string [, resource $link_identifier ])防止SQL注入。所以,最終的代碼可能看起來像:

$search = "100% Summer"; 
$search = addcslashes(mysql_real_escape_string($search), '%_'); 
+0

'addslashes'只增加了斜線單引號('),雙引號(「),反斜線(\)和NUL。 – deceze 2012-01-05 07:50:01

+0

@deceze,你的權利,我的錯誤糾正。 – 2012-01-05 07:53:01

0

可以逃脫百分號用反斜槓

$search = str_replace('%', '\%', $search); 

... 

WHERE catelogue.TITLE LIKE '%$search%' 

順便說一句,如果你的$search來自用戶的輸入,那麼你的代碼很容易受到SQL injection

+0

是啊,我知道SQL注入在哪裏有人可以放棄我的表,使其通過preg替換函數運行 – Mark 2012-01-05 07:57:18

+0

@user preg替換SQL注入函數?! – deceze 2012-01-05 08:27:39

+1

@deceze:窮人的消毒:-) – 2012-01-05 08:28:28

1
SELECT catelogue.ARTIST, catelogue.TITLE, catelogue.`CAT NO.`, 
catelogue.FORMAT,catelogue.`IMAGE PATH` 
FROM catelogue 
WHERE catelogue.TITLE LIKE '%100\% Summer%';