web-dev-qa-db-fra.com

Codeigniter LIKE avec caractère générique (%)

J'ai une requête de base de données simple dans codeigniter, mais je ne peux pas faire fonctionner la recherche avec un caractère générique. Voici mon code:

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

Si je supprime le caractère générique (%), la recherche fonctionne correctement. $ Query est également une chaîne avec une entrée utilisateur. Toute aide est appréciée.

23
James Douglas

$this->db->like() ajoute automatiquement le% s et échappe à la chaîne. Tout ce dont vous avez besoin est

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

Voir Classe d'enregistrement actif (CI 2) ou Classe Query Builder (CI 3) dans les documents de CI pour référence.

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

Fur Full comme vous pouvez utiliser:

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

Pour la requête% $, vous pouvez utiliser

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

et pour $ query%, vous pouvez utiliser

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

Si vous ne souhaitez pas utiliser le caractère générique (%), vous pouvez passer au troisième argument facultatif l'option "aucun".

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

J'utilise

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