搜索使用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>";
}
}
为什么不返回任何结果当我输入对应的信息在我的数据库搜索查询?
答
您不能调用字段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'
是否'$ _GET [ '查询']'数组不为空。 – SIFE 2011-05-22 11:35:07
你打算告诉我们你是如何修复Joshwaa的? – 2011-05-22 11:38:14
通过在列名称周围添加反引号。 Desc是一个保留的mysql关键字,完全忘了。 – Joshwaa 2011-05-22 13:48:27