0

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 に設定してオフにしようとしましたが、それでもうまくいきません。最後の 2 行をコメント アウトしても同じエラーが発生します。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

どんな助けでも大歓迎です!

4

2 に答える 2

1

最後の括弧を誤って間違った場所に置いてしまいました。検索文字列の後ではなく、「BOOLEAN MODE」の後にある必要があります。

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

于 2012-06-25T20:32:08.320 に答える
1

これ

 AGAINST (`'.$query.'`)

バッククォートではなく、引用符を使用してください。試す

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

また、構文は

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

http://dev.mysql.com/doc/refman//5.5/en/fulltext-boolean.htmlを正しく読んだら

于 2012-06-25T19:34:53.207 に答える