2011-05-22 112 views
1

我有這樣的代碼:搜索使用LIKE和OR

if(!isset($_GET['query'])) { 
    echo "<h1>No search query specified.</h1><a href='index.php'>Return</a>"; 
} else { 
    $query = trim($_GET['query']); 
    $query = mysql_real_escape_string($query); 
    $query = mysql_query("SELECT * FROM warps 
         WHERE name LIKE '%$query%' 
         OR desc LIKE '%$query%' OR keywords LIKE '%$query'"); 
    if($query) { 
    while($row = mysql_fetch_assoc($query)) { 
     echo $row['name']; 
    } 
    } else { 
    echo "<h1>No results found</h1>"; 
    } 
} 

爲什麼不返回任何結果當我輸入對應的信息在我的數據庫搜索查詢?

+0

是否'$ _GET [ '查詢']'數組不爲空。 – SIFE 2011-05-22 11:35:07

+2

你打算告訴我們你是如何修復Joshwaa的? – 2011-05-22 11:38:14

+1

通過在列名稱周圍添加反引號。 Desc是一個保留的mysql關鍵字,完全忘了。 – Joshwaa 2011-05-22 13:48:27

回答

3

您不能調用字段desc。或者如果你像這樣稱呼它使用`desc`。 DESC是一個命令,因此在你的查詢中MySQL認爲你想要的東西正在減少。

+0

+1。保留關鍵字列表:http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html – Sylverdrag 2011-05-22 11:41:26

1

試着「var_dump」你的查詢和結果,你回來了。 確保啓用了錯誤報告:

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

您的查詢前面已經提到,包含了MySQL的關鍵字作爲DESC列名。 如果沒有辦法重命名列,您可以將其括在反引號這樣的:

`desc` 
0

無論出於何種原因,您已決定不與反引號分隔的字段名。

你可以經常逃避這一點,但在你的情況下,你不能因爲DESC是一個關鍵字。

寫:

SELECT * FROM `warps` 
WHERE `name` LIKE '%$query%' 
    OR `desc` LIKE '%$query%' 
    OR `keywords` LIKE '%$query'