PHP/Codeigniter - MySQL全文搜索错误?

问题描述:

我正在尝试使用Active Record方法中构建的codeigniters执行全文搜索。我有一个“自定义”查询字符串之前,我几乎复制到codeigniter代码(可以这么说)。 where语句中的某处存在错误,但我无法找到它。PHP/Codeigniter - MySQL全文搜索错误?

$this->db->select('movies.*'); 
$this->db->from('movies'); 
$this->db->join('movies_genres', 'movies.id = movies_genres.movie_id', 'left'); 
$this->db->join('genres', 'movies_genres.genre_id = genres.id', 'left'); 
$this->db->where('MATCH (movies.movie_title) AGAINST (`'.$query.'`) IN BOOLEAN MODE', null, false); 
//$this->db->group_by('movies.id'); 
//$this->db->limit($count, $page); 

默认情况下,codeigniter可以通过在变量周围添加反引号来提高安全性。我试着把最后一个参数设置为false,但仍然没有运气。通过评论最后两行我仍然有同样的错误,如果我注释掉where语句,错误消失(并且我得到结果)。

下面是笨生成的查询:

SELECT `movies`.* FROM (`movies`) LEFT JOIN `movies_genres` ON `movies`.`id` = `movies_genres`.`movie_id` LEFT JOIN `genres` ON `movies_genres`.`genre_id` = `genres`.`id` WHERE MATCH (movies.movie_title) AGAINST (`the`) IN BOOLEAN MODE 

这里是错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BOOLEAN MODE' at line 5 

任何帮助,不胜感激!

AGAINST (`'.$query.'`) 

不应该与反引号,但引号。尝试

AGAINST (\''.$query.'\') 

也,语法似乎是

AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE); 

如果我正确

+0

不幸的是,同样的结果。 – qwerty

+0

我怀疑,至少这个错误应该有反向/报价代表的变化? – Nanne

+0

好吧,现在qoutes是sigle qoutes而不是反引号。这是我看到的唯一区别。除此之外,它们都是一样的。 – qwerty

阅读http://dev.mysql.com/doc/refman//5.5/en/fulltext-boolean.html我不小心把最后的结局括号放错了地方。它应该在“BOOLEAN MODE”之后,而不是在我放置的搜索字符串之后。 (“MATCH(movies.movi​​e_title)AGAINST('+”。$ query。“'BOOLEAN MODE)”,null,false);