Php Where条款中的流明和/或条件
我尝试在Lumen Framework中运行以下查询:Php Where条款中的流明和/或条件,php,laravel,lumen,Php,Laravel,Lumen,我尝试在Lumen Framework中运行以下查询: SELECT * FROM user WHERE (username = $username OR email = $username) AND password = $password AND flag = 1; 我的流明代码: $login = User::where('pass', '=', md5($pass)) ->where('flag', '=', $flag)
SELECT * FROM user WHERE (username = $username OR email = $username) AND password = $password AND flag = 1;
我的流明代码:
$login = User::where('pass', '=', md5($pass))
->where('flag', '=', $flag)
->where('username', '=', $username)
->orWhere('email', '=', $username)->first();
不知何故,这段代码总是返回true并绕过登录。这个问题出了什么问题
当我从查询中删除
或where
时,它非常适合用户名。如果你想将两个条件(用户名和电子邮件)组合成一个条件(用括号括起来),你必须这样做:
User::where('pass', '=', md5($pass))
->where('flag', '=', $flag)
->where(function ($query) use ($username) {
$query->where('username', '=', $username)
->orWhere('email', '=', $username);
})->first();
是有关Laravel查询生成器(Lumen使用的)的高级where条件的文档。遵循Laravel advance where
在我看来,你想要的是:
User::where('pass', '=', md5($pass))
->where('flag', '=', $flag)
->where(function ($query) use ($username) {
$query->where('username', '=', $username)
->orWhere('email', '=', $username);
})->first();
另外,请不要使用
md5
,尝试使用bcrypt()重新散列所有密码。我收到一个错误:未定义变量:username。我确保,$username在那里,但仍然收到这个错误哦,对不起,是的,$username变量不在闭包的范围内。我更新了我的答案。而且查询在所有情况下都是绕过并返回true:(@NewCo:这里的查询是pass=“pass”和flag=“flag”或(conditions)
。哦,@Amelia是对的,我的错。我再次编辑了我的答案。请现在再试一次……为什么你在2015年使用md5作为密码?Laravel/Lumen自动使用bcrypt()
,所以您已经手动覆盖了它。您的密码是否由md5()散列?
User::where('pass', '=', md5($pass))
->where('flag', '=', $flag)
->where(function ($query) use ($username) {
$query->where('username', '=', $username)
->orWhere('email', '=', $username);
})->first();