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
?将其直接放在查询字符串中是非常危险的。