Where子句中的流明和OR条件

New*_* Co 3 php laravel lumen

我试图在Lumen框架中运行以下查询:

SELECT * FROM user WHERE (username = $username OR email = $username) AND password = $password AND flag = 1;
Run Code Online (Sandbox Code Playgroud)

我的流明代码:

$login =  User::where('pass', '=', md5($pass))
               ->where('flag', '=', $flag)
               ->where('username', '=', $username)
               ->orWhere('email', '=', $username)->first();
Run Code Online (Sandbox Code Playgroud)

不知何故,此代码始终返回true并绕过登录.那个查询有什么问题?

当我orWhere从查询中删除它适用于用户名.

Vic*_*ciu 7

如果要将两个条件(用户名和电子邮件)分组到一个条件(用括号括起),则必须这样做:

User::where('pass', '=', md5($pass))
    ->where('flag', '=', $flag)
    ->where(function ($query) use ($username) {
        $query->where('username', '=', $username)
              ->orWhere('email', '=', $username);
    })->first();
Run Code Online (Sandbox Code Playgroud)

以下是Laravel查询构建器(Lumen使用的)条件的高级文档.


Fab*_*nes 5

在我看来,你想要的是这个:

User::where('pass', '=', md5($pass))
    ->where('flag', '=', $flag)
    ->where(function ($query) use ($username) {
        $query->where('username', '=', $username)
              ->orWhere('email', '=', $username);
    })->first();
Run Code Online (Sandbox Code Playgroud)

另请不要使用md5,请尝试使用bcrypt()重新散列所有密码