Where 子句中的 Lumen AND OR 条件
Lumen AND OR conditions in Where clause
我正在尝试 运行 在 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();
不知何故这段代码总是return true 并绕过登录。该查询有什么问题?
当我从查询中删除 orWhere
时,它非常适合用户名。
如果您想将两个条件(用户名和电子邮件)组合成一个条件(用括号括起来),您必须这样做:
User::where('pass', '=', md5($pass))
->where('flag', '=', $flag)
->where(function ($query) use ($username) {
$query->where('username', '=', $username)
->orWhere('email', '=', $username);
})->first();
Here 是关于 Laravel 查询生成器(Lumen 使用的)高级 where 条件的文档。
跟随laravel前进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();
看来你要的是这个:
User::where('pass', '=', md5($pass))
->where('flag', '=', $flag)
->where(function ($query) use ($username) {
$query->where('username', '=', $username)
->orWhere('email', '=', $username);
})->first();
另外请不要使用 md5
,尝试使用 bcrypt()
重新散列所有密码
我正在尝试 运行 在 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();
不知何故这段代码总是return true 并绕过登录。该查询有什么问题?
当我从查询中删除 orWhere
时,它非常适合用户名。
如果您想将两个条件(用户名和电子邮件)组合成一个条件(用括号括起来),您必须这样做:
User::where('pass', '=', md5($pass))
->where('flag', '=', $flag)
->where(function ($query) use ($username) {
$query->where('username', '=', $username)
->orWhere('email', '=', $username);
})->first();
Here 是关于 Laravel 查询生成器(Lumen 使用的)高级 where 条件的文档。
跟随laravel前进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();
看来你要的是这个:
User::where('pass', '=', md5($pass))
->where('flag', '=', $flag)
->where(function ($query) use ($username) {
$query->where('username', '=', $username)
->orWhere('email', '=', $username);
})->first();
另外请不要使用 md5
,尝试使用 bcrypt()