0

我的网站上有一个简单的搜索框,目前仅根据满足的某些条件生成结果。

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”等结果,因此搜索不必完全是数据库中的内容。

如果代码错误或过时,请原谅代码,这是取自一个有点旧的大学教程。

4

1 回答 1

3

没有办法只使用 MySql 搜索数据库中的所有内容,您仍然需要选择在哪些表中搜索哪些列。您可以使用不同的查询搜索不同的数据,然后在 PHP 中加入结果或进行某种 JOIN。如果你不小心,你最终会得到一些完全低效的东西。

还有一点注意 - 这应该已经匹配了部分单词 - LIKE 子句中搜索词周围的 % 表示“此位置的任何字符”

要在您的餐厅中搜索更多字段,您可以从以下内容开始(例如,如果您有口号):

$result = mysql_query("SELECT * FROM `restaurants` WHERE `restaurant` LIKE '%{$_GET['searchbox']}%' OR `slogan` LIKE '%{$_GET['searchbox']}%'");

但是,您不应该将用户输入直接注入 SQL,这会使您容易受到攻击!

要使用 JOIN 在其他表中搜索更多字段,您可以从以下内容开始(例如,如果您有一个 food 表):

$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']}%'");

如果您需要我刚刚给您的帮助,您可以查看这两页:

http://dev.mysql.com/doc/refman/5.0/en/select.html

http://dev.mysql.com/doc/refman/5.0/en/join.html

于 2013-04-06T16:01:29.793 回答