$this->db->select('*');
$this->db->from('user');
$this->db->where("Password",$password);
$this->db->where("Status",true);
$this->db->where("(Username = '$username' OR Email = '$email')");
$query=$this->db->get();
查询对于电子邮件条件是成功的但是对于用户名失败,有人可以帮助我理解为什么它不能按照预期的方式运行。
功能:当password = password和status = true且(username = username或email = email)时,查询应返回记录。
这是一个登录表单,用户可以在其中指定用户名和密码或电子邮件和密码,这些匹配的查询应返回结果。
另外注意,查询与密码不完全匹配,我的意思是它不区分大小写,我希望密码比较区分大小写,这样我们才能得到完全匹配。
请帮忙!谢谢我的建议
答案 0 :(得分:1)
正如CodeIgniter提供的用户指南中所述
如果您使用多个函数调用,它们将与AND链接在一起:
$this->db->where('name', $name);
$this->db->where('title', $title);
$this->db->where('status', $status);
上面的代码将生成如下SQL:
WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
如果你想在条件下使用OR,你应该试试这个:
$this->db->where('name !=', $name);
$this->db->or_where('id >', $id);
上面的代码产生:
WHERE name != 'Joe' OR id > 50
您也可以按如下方式执行SQL语句:
$this->db->query('YOUR QUERY HERE');
为了防止SQL注入,您可以执行以下操作:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
答案 1 :(得分:0)
您可以使用以下方法获得所需的结果。这里我们要做的是首先验证用户输入,即电子邮件或用户名。如果是用户名,请检入用户名或电子邮件检查用户名列。
$this->db->select('*');
$this->db->from('user');
$this->db->where("Password",$password);
$this->db->where("Status",true);
$pattern = "(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)";
if(preg_match($pattern,$email))//check if entered value in email field is email
$this->db->where('email',$email);
else // you can verify here username if it is any standard format
$this->db->where('username',$email);
$query = $this->db->get();
这个查询效率很高,因为它节省了sql查询的执行时间。