2013-06-27 62 views
1

我有一個table名爲tags,它包含如下所示的條目。撇號like和equal子句不起作用

 ID   Name       Created Date
 10 limit\'s 2013-06-27 05:18:35

現在我想搜索使用查詢limit's但無法搜索記錄。

對於我所嘗試過的。

'SELECT id FROM tags AS Tag WHERE name = "%'. urlencode($adTag) .'%" LIMIT 0,1' 

'SELECT id FROM tags AS Tag WHERE name LIKE "%'. htmlspecialchars($adTag) .'%" LIMIT 0,1' 

'SELECT * FROM tags AS Tag WHERE name LIKE "%'. $adTag .'%" OR REPLACE(name,'''','') LIKE "%'. $adTag .'%"' 

'SELECT id FROM tags AS Tag WHERE name LIKE "%'. mysql_real_escape_string(stripslashes($adTag)) .'%" LIMIT 0,1' 

'SELECT id FROM tags AS Tag WHERE name LIKE "%'. mysql_real_escape_string($adTag) .'%" LIMIT 0,1' 

$adTag動態來了,它的價值是limit's。以上嘗試,但沒有一個工作。

讓我知道我在做什麼錯了,所以我可以更正MySQL。

謝謝。

+0

你爲什麼不使用'PDO'或'MySQLi'? –

+0

@JW웃感謝您的建議,但它幾乎完成階段,我不能回滾,因爲我使用自定義MVC和使用MySQL ...和其內部項目,所以它不需要擔心'SQL注入' –

+1

是「**限制」中有一個反斜槓「**是因爲**還是僅僅是由於某種錯誤? –

回答

1

後好很多googleing完成工作,我終於得到這個工作。

下面是我的解決方案。

SELECT * 
FROM tags 
WHERE `name` = 'limit\\''s' 
LIMIT 0 , 30 

它的工作就像魅力。希望這將有助於未來其他極客。

+0

是的,這就是我的代碼中的兩個addslashes:D –

+0

@JmVerastigue對不起,但對我來說它不起作用... –

+0

@JmVerastigue我給了你+1這讓我覺得不同。 –

0

我試着重新創建你的數據庫和搜索,它需要2個addslashes出現在結果上。我認爲MySQL會自動轉義第一個斜槓。

addslashes(addslashes($adTag)); 
+0

這是一個可怕的 –

+0

是的,我不會推薦它。您應該考慮從數據中刪除斜槓。 –

1

如果你要搜索limit's,你必須在你的表limit's
所以,首先擺脫表項中錯誤的反斜槓。

剩下的就是像往常一樣

$tag = $db->getOne('SELECT id FROM tags WHERE name = ?s', $adTag); 
0

試試這個..

$sql = "SELECT id FROM tags AS Tag WHERE name LIKE %". mysql_real_escape_string(stripslashes(urldecode($adTag))) ."% LIMIT 0,1 
+2

請問爲什麼選擇這種特定的各種PHP函數組合? –