Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP搜索MySQL_Php_Mysql - Fatal编程技术网

PHP搜索MySQL

PHP搜索MySQL,php,mysql,Php,Mysql,我有这个密码: function searchMovie($query) { $this->db->where("film_name LIKE '%$query%'"); $movies = $this->db->get ("films", 40); if($this->db->count > 0) { return $movies; }

我有这个密码:

function searchMovie($query)
    {
        $this->db->where("film_name LIKE  '%$query%'");
        $movies = $this->db->get ("films", 40);
        if($this->db->count > 0)
        {
            return $movies;
        }
        return false;
    }
“我的提交表单”按钮中的Javascript代码将删除所有特殊字符,如;:'/然后将用户重定向到搜索uri(szukaj/query)。例如,如果film_name是Raj:wiara,用户搜索Raj:wiara,则查询看起来像Raj-wiara,用户没有得到任何结果。我曾考虑将查询分解为单个单词,然后foreach单词从db中进行选择,但它会给出同一电影的多个结果。我不想更改javascript代码,我想如果没有特殊的字符,我无法制作电影名称,比如:。
或者在db中为film_关键字创建另一列,并在该列中添加以分隔的所有单词,或其他内容,然后搜索该列?

您确实可以使用的解决方案分解字符串

function searchMovie($query)
    {
        $queries = preg_split('/[^a-z0-9.\']+/i', $query);
        foreach ($queries as $keyword){
             $this->db->where("film_name LIKE  '%$keyword%'");
        }

        $movies = $this->db->get ("films", 40);
        if($this->db->count > 0)
        {
            return $movies;
        }
        return false;
    }

这将为数据库where创建多个
条件,因此结果将被过滤。

您确实可以使用的解决方案分解字符串

function searchMovie($query)
    {
        $queries = preg_split('/[^a-z0-9.\']+/i', $query);
        foreach ($queries as $keyword){
             $this->db->where("film_name LIKE  '%$keyword%'");
        }

        $movies = $this->db->get ("films", 40);
        if($this->db->count > 0)
        {
            return $movies;
        }
        return false;
    }

这将为您的数据库where创建多个
条件,因此结果将被过滤。

MySQL的全文搜索功能是您的朋友:

将返回一系列比赛并给出分数,以便您以最佳比赛顺序返回



警告:
$this->db->where(“电影名称,如“%$query%”)对SQL注入开放。任何人都可以浏览JavaScript,因此您必须始终清理服务器端的输入。这最好也使用DB函数来完成,而不仅仅是剥离字符-因此,请检查您正在使用的任何库以完成此操作。

MySQL的全文搜索函数是您的朋友:

将返回一系列比赛并给出分数,以便您以最佳比赛顺序返回



警告:
$this->db->where(“电影名称,如“%$query%”)对SQL注入开放。任何人都可以浏览JavaScript,因此您必须始终清理服务器端的输入。这最好也使用DB函数来完成,而不仅仅是剥离字符-因此,请检查您正在使用的任何库以执行此操作。

我使用了
SELECT*FROM
films`WHERE MATCH(film_name)对('+Raj'在布尔模式下)`并且它没有返回任何匹配我使用的是PHP my admin。选择表格时,是否单击“全文”以
更改表格
films`添加全文(`film_name
确定如果我搜索Raj:wiara,它会返回匹配项。但是当我只键入“raj”甚至“raj:”时,它就不会了。文档中隐藏的一些问题:你添加索引了吗?在构建布尔值之前,请先尝试
SELECT*FROM films WHERE MATCH(film_name)与('Raj')
。此外,如果您使用的是较旧版本的mySQL,那么您需要myISAM表-它只适用于5.7+中的innoDB(我认为这是正确的版本)。不能说,这显然取决于数据库/索引的大小。你得吸一口看看。您可能会发现,最好删除2个或更少字符的搜索词,获得更大的结果池,并将PHP中的结果与简短的搜索词进行匹配,然后删除不适合的搜索词-但您需要进行测试以找出哪一个是最好的。我做了
SELECT*FROM
films`WHERE match(film_name)与('+Raj'在布尔模式下)进行了匹配`它没有返回任何匹配项我正在使用PHP我的管理员。选择表格时,是否单击“全文”以
更改表格
films`添加全文(`film_name
确定如果我搜索Raj:wiara,它会返回匹配项。但是当我只键入“raj”甚至“raj:”时,它就不会了。文档中隐藏的一些问题:你添加索引了吗?在构建布尔值之前,请先尝试
SELECT*FROM films WHERE MATCH(film_name)与('Raj')
。此外,如果您使用的是较旧版本的mySQL,那么您需要myISAM表-它只适用于5.7+中的innoDB(我认为这是正确的版本)。不能说,这显然取决于数据库/索引的大小。你得吸一口看看。您可能会发现,最好删除2个或更少字符的搜索词,获得更大的结果池,并将PHP中的结果与简短的搜索词进行匹配,然后删除不适合的搜索词-但您需要进行测试,以确定哪一个是最好的。感谢帮助!可以很好,但我会用全文回答,它已经实现了搜索分数等。。。哪一个更适合我:)无论如何,谢谢你!谢谢你的帮助!可以很好,但我会用全文回答,它已经实现了搜索分数等。。。哪一个更适合我:)无论如何,谢谢你!您在这里使用的是什么框架?为什么不使用占位符值来处理
$query
?将其直接放在查询字符串中是非常危险的。您在这里使用的是什么框架?为什么不使用占位符值来处理
$query
?将其直接放在查询字符串中是非常危险的。