He simple consulta de base de datos en codeigniter, sin embargo no puedo conseguir que la búsqueda funcione con comodín. Este es mi código:

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

Si puedo eliminar el carácter comodín(%) luego de la búsqueda funciona bien. También $consulta es justo cadena con la entrada del usuario. Cualquier ayuda es muy apreciada.

Probar sin $this->db->escape_like_str($consulta);
pero no te olvides $this->db->como(‘película.title’,$consulta,antes); es muy costoso de búsqueda debido a que mysql no puede usar un índice para este. Mejor uso de índice de texto completo

OriginalEl autor James Douglas | 2013-04-26

6 Comentarios

  1. 37

    $this->db->like() agrega automáticamente el %s y se escapa de la cadena. Así que todo lo que usted necesita es

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

    Ver Activa de la Clase de Registro (CI 2) o El Generador de consultas de Clase (CI 3) en CI docs para referencia.

    No funciona así. Si puedo buscar por, digamos, Die Hard, este se encuentra porque el título es correspondido. Si yo sólo uso Morir o Duro, no se encuentra nada. Si yo uso SQL con la cadena de valor funciona bien.
    Mi mal que me había error más en el programa.
    Para %$query puede utilizar $this->db->like('title', $query, 'before') y para $query% puede utilizar $this->db->like('title', $query, 'after') como se dice en el enlace en la respuesta.

    OriginalEl autor Samutz

  2. 8

    De piel Completa como puede el usuario :

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

    De %$consulta puede utilizar

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

    y por $query% puede utilizar

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

    OriginalEl autor NIMESH PAREKH

  3. 7
      $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%'

    OriginalEl autor Bijendra Ch

  4. 1

    Estoy usando

    $this->db->query("SELECT * FROM film WHERE film.title LIKE '%$query%'"); for such purposes
    Yo lo probé pero no funciona
    Por favor, no hagas esto, ustedes se abrirán a inyección de SQL
    Usted puede probar esto, pero asegúrese de que es seguro.

    OriginalEl autor Spec

  5. 1

    Si usted no desea utilizar el carácter comodín (%) se puede pasar al tercer argumento opcional la opción «ninguno».

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

    OriginalEl autor jemrlee

  6. -1

    Buscando en varios campos a la vez se puede hacer así…

    function search($search)
    {
        $sql = "SELECT * FROM some_table
        WHERE UPPER(a_name) LIKE ?
        OR
        UPPER(a_full_name) LIKE ?
        OR
        UPPER(a_city) LIKE ?
        OR
        UPPER(a_code) LIKE ?
        ";
        $arr = array_map(array($this,"wrapLIKE"),array($search, $search, $search, $search));
        $r = $this->db->query($sql, $arr);
        return $r;
    }
    
    function wrapLIKE($string)
    {
        return strtoupper("%$string%");
    }

    OriginalEl autor CG_DEV

Dejar respuesta

Please enter your comment!
Please enter your name here