我在CodeIgniter上使用Active Record。我很困惑我应该采取哪种方法。目前,我们的登录系统允许用户使用用户名/电子邮件进行登录以及密码。但我目前的活跃记录似乎是让用户登录,如果他选择使用电子邮件+没有密码。
现在这是我的问题:
$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;
示例输入:
结果中第四个测试输入必须 失败 ,但即使密码为空,它似乎也会记录用户。
答案 0 :(得分:18)
问题可能是在WHERE子句中混合AND和OR时需要添加括号。试试这个:
$this->db->select('id,level,email,username');
$this->db->where("(email = '$user' OR username = '$user')
AND password = '$pass'");
$query = $this->db->get('users');
答案 1 :(得分:4)
@RidIculous是对的。这是一种正确的方法:
$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');
或者我喜欢的格式(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');
答案 2 :(得分:0)
$conditions = '(`username`="'.$username.'" OR `email`="'.$email.' OR `mobile`="'.$mobile.'"') AND `password`="'.$password.'"';
$query = $this->db->get_where('table_name', $conditions);
$result = $query->result();