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

时间:2012-06-25 19:32:32

标签: mysql codeigniter full-text-search boolean

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

$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语句,错误消失(我得到结果)。

以下是Codeigniter生成的查询:

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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

这个

 AGAINST (`'.$query.'`)

不应该使用反引号,而应该使用引号。尝试

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

另外,语法似乎是

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

如果我正确阅读http://dev.mysql.com/doc/refman//5.5/en/fulltext-boolean.html

答案 1 :(得分:1)

我不小心将最后一个结束括号放在了错误的地方。它应该在“BOOLEAN MODE”之后,而不是在我把它放在搜索字符串之后。

$ this-> db-> where(“MATCH(movies.movi​​e_title)AGAINST('+”。$ query。“'IN BOOLEAN MODE)”,null,false);