Codeigniter - 活动记录如何到达(条件或条件)

时间:2014-09-28 04:37:05

标签: php mysql codeigniter activerecord

$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)时,查询应返回记录。

这是一个登录表单,用户可以在其中指定用户名和密码或电子邮件和密码,这些匹配的查询应返回结果。

另外注意,查询与密码不完全匹配,我的意思是它不区分大小写,我希望密码比较区分大小写,这样我们才能得到完全匹配。

请帮忙!谢谢我的建议

2 个答案:

答案 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查询的执行时间。