PHP 搜索引擎 即使输入与表中的数据匹配,也不会返回任何结果



我正在尝试为我的网站创建一个搜索引擎,用户可以在其中输入关键字,PHP 脚本将搜索我的fyp_items表的"名称"和"描述"列。到目前为止,我已经设法将输入分解为一个单词数组,并尝试在我的数据库上执行 SELECT 查询。

问题是,即使关键字与表中数据的关键字匹配,它也无法找到项目。下面是我的脚本...我希望有人能帮助我。

if(empty($_POST)=== false){
    $output = '';
    $error = '';
    $input = $_POST['search_input'];
    $i=0;
    if($input){
        $keyword = explode(" ", $input);
        require ('core/dbconnection.php');
        //If a user is logged in check if the user is Admin or Customer. 
        if(isset($_SESSION['userid'])){ 
            if($admin == 1){
            }
        }else{
            //If user is not logged in search items table only.
            $search_items = "SELECT * FROM fyp_items WHERE ";
            foreach($keyword as $k){
                $k = mysql_real_escape_string($k);
                $i++;
                if($i == 1){
                    $search_items .= "name LIKE '$k' OR description LIKE '$k'";
                }else
                    $search_items .= " OR name LIKE '$k' OR description LIKE '$k'";
            }
            $item_qry = mysql_query("$search_items")or die(mysql_error());
            $numrows = mysql_num_rows($item_qry);
            if($numrows > 0){
                $output = 'found it';
            }else
                $error = '<p class="pageerror">Sorry, what you were looking for was not found.</p>';
        }
    }else
        $error = '<p class="pageerror">Please enter your search terms.</p>';

我已经通过回显输出来测试帖子,并且我还回显了$search_items变量来获得这个......http://awesomescreenshot.com/05c2fwytac

您的帮助将不胜感激!

您正在构建一个不正确的查询字符串,如下所示

SELECT ... WHERE name LIKE 'foo' OR description LIKE 'foo'

没有威尔卡的LIKE比较是没有意义的。你在功能上得到了相当于

SELECT ... WHERE name='foo' OR description='foo'

通配符允许在字段中匹配子字符串:

SELECT ... WHERE name='%foo%' OR description = '%foo%'

因此,单词foo可以出现在字段中的任何地方并匹配。现在,只有当foo是任一字段中的唯一内容时,您的查询才会匹配。

而且这类查询效率非常低,尤其是在搜索词数量攀升的情况下。您应该起诉fulltext搜索:https://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html