搜索使用LIKE和OR

问题描述:

我有这样的代码:搜索使用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

您不能调用字段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

试着“var_dump”你的查询和结果,你回来了。 确保启用了错误报告:

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

您的查询前面已经提到,包含了MySQL的关键字作为DESC列名。 如果没有办法重命名列,您可以将其括在反引号这样的:

`desc` 

无论出于何种原因,您已决定不与反引号分隔的字段名。

你可以经常逃避这一点,但在你的情况下,你不能因为DESC是一个关键字。

写:

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