我正在尝试创建登录。但是在检查来自数据库的凭证时,如果任何1数据正确而其他数据也不正确则记录 登录名,电子邮件,手机都是允许的 'status'应该是'active'是一个额外的条件 我做错了什么?
function login($username, $password) {
$where = "status='active' AND name='$username' OR email_id= '$username' OR mobile_no='$username' AND password ='trim($password)'";
$this->db->select('*');
$this->db->from('user_details');
$this->db->where($where);
//$this->db->where('password', trim($password));
$this->db->limit(1);
$query = $this->db->get();
if ($query->num_rows() == 1) {
return $query->result();
} else {
return false;
}
}
答案 0 :(得分:3)
使用group_start()
和group_end()
进行查询分组。不用担心SQL Injection
。
$this->db->select('*')->from('user_details')
->where('status', 'active')
->group_start()
->where('email_id',$username )
->or_where('mobile_no',$username)
->group_end()
->where('password',trim($password))
->limit(1)
->get();
有关详情,请参阅此处Codeigniter Query Builder
答案 1 :(得分:1)
你在where子句中有问题。您需要使用括号来检查OR的列。
请查看以下内容。
$where = "status='active' AND
(name='$username' OR email_id= '$username' OR mobile_no='$username')
AND password ='trim($password)'";