【问题标题】:Codeigniter - Active Record How To Where(codition OR condition )Codeigniter - Active Record 如何在哪里(代码或条件)
【发布时间】:2014-09-28 04:37:05
【问题描述】:
$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 and status=true and (username=username or email=email)时查询应该返回记录。

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

另一方面,查询与密码不完全匹配,我的意思是它不区分大小写,我希望密码比较区分大小写,以便我们可以得到完全匹配。

请帮忙!谢谢我的建议

【问题讨论】:

    标签: php mysql codeigniter activerecord


    【解决方案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'));
    

    【讨论】:

    • 感谢您的意见,不胜感激
    • @coolcoder 如果解决了问题,您可以接受答案并将其标记为已解决,这是如何做到的 => meta.stackexchange.com/a/5235 欢迎来到 Stack。
    【解决方案2】:

    您可以使用以下方法达到预期的效果。在这里,我们要做的是首先验证用户输入是电子邮件还是用户名。如果是用户名,则检查用户名,或者如果电子邮件检查用户名列。

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

    【讨论】:

    • 感谢您的建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2011-03-06
    • 2015-01-04
    相关资源
    最近更新 更多