web-dev-qa-db-ja.com

ワイルドカード(%)を使用したCodeigniter LIKE

Codeigniterに単純なデータベースクエリがありますが、ワイルドカードを使用して検索することはできません。これは私のコードです:

$this->db->like('film.title',"%$query%");
$this->db->escape_like_str($query);
$res = $this->db->get('film');

ワイルドカード(%)を削除すると、検索は正常に機能します。また、$ queryはユーザー入力を持つ単なる文字列です。どんな助けも大歓迎です。

23
James Douglas

$this->db->like()は、%sを自動的に追加し、文字列をエスケープします。必要なのは

$this->db->like('title', $query);
$res = $this->db->get('film');

参考として、CIのドキュメントの Active Record Class(CI 2) または Query Builder Class(CI 3) を参照してください。

40
Samutz
  $this->db->like('title', 'match', 'before'); 
 // Produces: WHERE title LIKE '%match' 

 $this->db->like('title', 'match', 'after'); 
// Produces: WHERE title LIKE 'match%' 

$this->db->like('title', 'match', 'both'); 
// Produces: WHERE title LIKE '%match%'
8
Bijendra Ch

あなたができるように毛皮フル:

$this->db->like('title',$query);

%$ queryには次を使用できます

$this->db->like('title', $query, 'before');

そして、$ query%に使用できます

$this->db->like('title', $query, 'after');
8
NIMESH PAREKH

ワイルドカード(%)を使用したくない場合は、オプションの3番目の引数にオプション 'none'を渡すことができます。

$this->db->like('title', 'match', 'none'); 
// Produces: WHERE title LIKE 'match'
1
jemrlee

私は使っています

$this->db->query("SELECT * FROM film WHERE film.title LIKE '%$query%'"); for such purposes
1
Spec