我正在尝试在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)
->where('username', '=', $username)
->orWhere('email', '=', $username)->first();
不知何故,此代码始终返回true并绕过登录。该查询有什么问题?
当我从查询中删除orWhere
时,它非常适合用户名。
答案 0 :(得分:7)
如果要将两个条件(用户名和电子邮件)分组到一个条件(括号括起)中,则必须这样做:
User::where('pass', '=', md5($pass))
->where('flag', '=', $flag)
->where(function ($query) use ($username) {
$query->where('username', '=', $username)
->orWhere('email', '=', $username);
})->first();
Here是有关Laravel查询构建器(Lumen使用)的条件的高级文档。
答案 1 :(得分:5)
在我看来,你想要的是这个:
User::where('pass', '=', md5($pass))
->where('flag', '=', $flag)
->where(function ($query) use ($username) {
$query->where('username', '=', $username)
->orWhere('email', '=', $username);
})->first();
另请不要使用md5
,请尝试使用bcrypt()重新散列所有密码
答案 2 :(得分:0)
跟随laravel advance http://laravel.com/docs/4.2/queries#advanced-wheres
User::where('pass', '=', md5($pass))
->where('flag', '=', $flag)
->where(function ($query) use ($username) {
$query->where('username', '=', $username)
->where('email', '=', $username);
})->first();