2011-09-26 24 views
5

En CodeIngiter Guía del usuario, que dijo que el siguiente código:problema con los "count_all_results" y "dónde" con Active Record en CodeIgniter

$this->db->where('name', $name); 
$this->db->where('title', $title); 
$this->db->where('status', $status); 
// WHERE name = 'Joe' AND title = 'boss' AND status = 'active' 

Significa que cuando quiero seleccionar alguna cosa de la base de datos de registro activo, yo debe usar el método where y lo hará reemplazando AND entre los campos. ahora quiero hacer la página de inicio de sesión, hago esto:

public function True_login($username = '',$password = '') 
    { 
     $this->db->flush_cache(); 
     $this->db->where('username',$username); 
     $this->db->where('password',$password); 
     $count = $this->db->count_all_results('PM_ADMIN_LIST'); 
     if ($count === 1) 
     { 
      return TRUE; 
     } 
     else 
     { 
      return FALSE; 
     } 
    }
pero devolverá TRUE si username=$username OR password = $password. si uno de los nombre de usuario o contraseña se encuentra en la tabla (y $count === 1 devolverá VERDADERO) ¿dónde está mi prbolem y cómo debo solucionarlo?

+1

De acuerdo con la documentación, al llamar "where" dos veces se generará una consulta AND. No entiendo cuál es el problema? –

+0

¿Quiere decir que se evalúa como 'O' en lugar de 'Y'? – ace

+0

¿Has probado el * Método asociativo de matriz *? ¿Qué versión codeigniter estás usando? – hakre

Respuesta

12
$this->db->count_all_results('PM_ADMIN_LIST'); 

está devolviendo el número de filas en la tabla y haciendo caso omiso de los restrictores que están encima.

Probar: -

También, poner un poco de depuración en - si sabía lo que el valor de $count era entonces puede haber ayudado a que usted se resuelve que la consulta Active Record que estaba mal en lugar de pensar que era haciendo un OR en vez de un AND.

+0

Lo hice, pero devolveré el mismo resultado que mi código. Intenté $ count = $ this-> db-> where ('username', $ username) -> where ('contraseña', $ contraseña) -> get ('PM_ADMIN_LIST') -> num_rows(); too.but Tiene este problema también. –

+0

El código que publiqué debería funcionar, publique su versión del código que ha probado. – Bruce

+0

lo siento bruce, este es mi error. Funciona. –

2

Simplemente use-> $ this-> db-> count_all(); en lugar de $ this-> db-> count_all_results(); problema resuelto .......

0

Usted simplemente puede hacerlo mediante la adición segundo parámetro con el valor false en count_all_results() función.

$this->db->count_all_results('PM_ADMIN_LIST',FALSE); 
Cuestiones relacionadas