update not left example affected active codeigniter activerecord codeigniter-2

not - codeigniter active record where, or_where?



update codeigniter example (3)

El problema es probablemente que necesite agregar corchetes al mezclar AND y OR en una cláusula WHERE. Prueba esto:

$this->db->select(''id,level,email,username''); $this->db->where("(email = ''$user'' OR username = ''$user'') AND password = ''$pass''"); $query = $this->db->get(''users'');

Estoy usando Active Record en CodeIgniter. Estoy confundido sobre qué enfoque debo tomar. Actualmente, nuestro sistema de inicio de sesión permite que el usuario use el nombre de usuario / correo electrónico para el inicio de sesión junto con la contraseña. Pero mi registro activo actual parece permitir que el usuario inicie sesión si elige usar el correo electrónico + sin contraseña.

En este momento esta es mi consulta:

$this->db->select(''id,level,email,username''); $this->db->where(''email'',$user); $this->db->or_where(''username'',$user); $this->db->where(''password'',$pass); $query = $this->db->get(''users''); if($query->num_rows>0) return TRUE; else return FALSE;

Entradas de muestra:

  • Nombre de usuario: prueba | Contraseña: pase | Resultado: éxito
  • Nombre de usuario: prueba | Contraseña: vacía | Resultado: Fallido
  • Nombre de usuario: [email protected] | Contraseña: pase | Resultado: éxito
  • Nombre de usuario: [email protected] | Contraseña: vacía | Resultado: éxito

La cuarta entrada de prueba debe tener un resultado fallido , pero parece que registra al usuario incluso si la contraseña está vacía.


@RidIculous tiene razón. Esta es una forma correcta de hacerlo:

$user = $this->db->escape($user); $this->db->select(''id,level,email,username''); $this->db->where("(email = $user OR username = $user)"); $this->db->where(''password'', $pass); $query = $this->db->get(''users'');

O un formato que prefiero (PHP 5+)

$user = $this->db->escape($user); $query = $this->db ->select(''id,level,email,username'') ->where("(email = $user OR username = $user)") ->where(''password'', $pass) ->get(''users'');


$conditions = ''(`username`="''.$username.''" OR `email`="''.$email.'' OR `mobile`="''.$mobile.''"'') AND `password`="''.$password.''"''; $query = $this->db->get_where(''table_name'', $conditions); $result = $query->result();