2014-09-28 65 views
-1
$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(); 

查询成功的电子邮件条件,但用户名失败,有人可以帮助我理解为什么这不会按照预期的方式运作。Codeigniter - 活动记录如何在哪里(codition或条件)

功能:当password = password和status = true和(username = username或email = email)时,查询应该返回记录。

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

此外在另一个说明查询不完全匹配的密码正好我的意思是不区分大小写,我想密码比较是区分大小写,所以我们可以得到一个完全匹配。

请帮忙!感谢我advbance

回答

1

因为它是由笨

提供的用户指南中如果使用多个函数调用,他们将与它们之间被链接说:

$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' 

如果你想使用或条件,你应该试试这个:

$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')); 
+0

感谢您的输入,非常感谢 – coolcoder 2014-09-29 04:44:02

+0

@coolcoder您可以接受答案并将其标记为已解决,如果它解决了问题,请按照以下步骤操作=> http http://meta.stackexchange.com/a/5235/**并欢迎来到Stack。 – 2014-09-29 17:19:28

0

您可以使用以下方法获得所需的结果。在这里,我们要做的是首先验证用户输入是电子邮件还是用户名。如果是用户名,请检查用户名或电子邮件是否检入用户名列。

$this->db->select('*'); 
$this->db->from('user'); 
$this->db->where("Password",$password); 
$this->db->where("Status",true); 

$pattern = "(^[a-zA-Z0-9_.+-][email protected][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查询的执行时间。

+0

感谢您的建议 – coolcoder 2014-09-29 04:44:32