codeigniter活动记录在哪里,or_where?

Lea*_*cia 6 activerecord codeigniter codeigniter-2

我在CodeIgniter上使用Active Record.我很困惑我应该采取哪种方法.目前,我们的登录系统允许用户使用用户名/电子邮件进行登录以及密码.但我目前的活跃记录似乎让用户登录,如果他选择使用电子邮件+没有密码.

现在这是我的查询:

$this->db->select('id,level,email,username');
$this->db->where('email',$user);
$this->db->or_where('username',$user);
$this->db->where('password',$pass);
$query = $this->db->get('users');

if($query->num_rows>0)
  return TRUE;
else
  return FALSE;
Run Code Online (Sandbox Code Playgroud)

样本输入:

  • 用户名:test | 密码:通过 | 结果:成功
  • 用户名:test | 密码: | 结果:失败
  • 用户名:test@domain.com | 密码:通过 | 结果:成功
  • 用户名:test@domain.com | 密码: | 结果:成功

第四个测试输入必须是Failed in result,但即使密码为空,它似乎也会记录用户.

saf*_*rov 18

问题可能是在WHERE子句中混合AND和OR时需要添加括号.试试这个:

$this->db->select('id,level,email,username');
$this->db->where("(email = '$user' OR username = '$user') 
                   AND password = '$pass'");
$query = $this->db->get('users');
Run Code Online (Sandbox Code Playgroud)

  • 这不会破坏活动记录的目的并打开SQL注入的应用程序? (14认同)