我的网站上有一个简单的搜索框,现在只根据符合的某些标准生成结果。
if(isset($_GET['action'])&&isset($_GET['searchbox'])) {
if($_GET['searchbox']!='') {
$result = mysql_query("SELECT * FROM `restaurants` WHERE `restaurant` LIKE '%{$_GET['searchbox']}%'"); // RESULT IS FIND EVERYTHING THAT MATCHES SEARCH FROM TABLE //
} else {
$result = mysql_query("SELECT * FROM `restaurants`");
}
}
<form action="search.php" id="searchform" method="get" class="searchbox-container">
<input type="text" id="searchbox" name="searchbox" class="searchbox" />
<input type="submit" class="searchbox-btn" value="Search" />
<input type="hidden" name="action" value="search" />
我想要的是搜索框从所有表格数据中返回数据库中的结果,而不仅仅是餐馆名称等特定数据。
我也希望它能够工作,这样如果有人搜索“sto”,那么“stoke”等结果就会出现,所以搜索不一定是数据库中的搜索结果。
如果代码错误或过时,请原谅代码,这是从一个有点旧的大学教程中获取的。答案 0 :(得分:3)
没有办法只使用MySql搜索数据库中的所有内容,您仍然需要选择要在哪些表中搜索哪些列。您可以使用不同的查询搜索不同的数据,然后在PHP中加入结果或进行某种JOIN。如果你不小心,虽然你最终会得到一些效率低下的东西。
还有一个注意事项 - 这应该已经匹配了部分单词 - LIKE子句中搜索词周围的%表示“此位置中的任何字符”
要搜索餐馆中的更多字段,您可以从以下内容开始(例如,如果您有口号):
$result = mysql_query("SELECT * FROM `restaurants` WHERE `restaurant` LIKE '%{$_GET['searchbox']}%' OR `slogan` LIKE '%{$_GET['searchbox']}%'");
你不应该直接将用户输入注入SQL,它会让你受到攻击!
要使用JOIN搜索其他表中的更多字段,您可以从以下开始(例如,如果您有食物表):
$result = mysql_query("SELECT `restaurants`.* FROM `restaurants` LEFT JOIN `food` ON `food`.`restaurant_id` = `restaurant`.`id` WHERE `restaurant` LIKE '%{$_GET['searchbox']}%' OR `food` LIKE '%{$_GET['searchbox']}%'");
如果您需要有关我刚刚给您的帮助,您可以查看这两页: