【问题标题】:PHP/Codeigniter - MySQL error on fulltext search?PHP/Codeigniter - 全文搜索时的 MySQL 错误?
【发布时间】:2012-06-27 02:34:27
【问题描述】:

我正在尝试使用内置在 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

非常感谢任何帮助!

【问题讨论】:

    标签: mysql codeigniter full-text-search boolean


    【解决方案1】:

    这个

     AGAINST (`'.$query.'`)
    

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

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

    另外,语法似乎是

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

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

    【讨论】:

    • 我怀疑,至少该错误是否应该表示反引号/引号的变化?
    • 嗯,是的,qoutes 现在是单引号而不是反引号。这是我看到的唯一区别。除此之外都一样。
    • 您可能想阅读手册顺便说一句。我刚做了,发现语法是这样的:AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE); ... dev.mysql.com/doc/refman//5.5/en/fulltext-boolean.html
    • 我知道语法。如果单词前没有使用运算符(+ 或 -),则表示“或”。语法似乎是正确的,它只是不工作。即使在 $query 之前加上 +,它仍然不起作用,所以我认为这不是问题。
    • 我的错,最后一个括号放错了地方。感谢您的帮助!
    【解决方案2】:

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

    $this->db->where("MATCH (movies.movi​​e_title) 反对 ('+".$query."' IN BOOLEAN MODE)", null, false);

    【讨论】:

      猜你喜欢
      • 2011-06-26
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 2010-10-22
      相关资源
      最近更新 更多