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

时间:2014-03-04 20:18:03

标签: php mysql sql search

我正在尝试为我的网站创建一个搜索引擎,用户可以在其中输入关键字,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

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

你正在构建一个不正确的查询字符串,这就像

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