3

我正在尝试在流明框架中运行以下查询:

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从查询中删除时,它非常适合用户名。

4

3 回答 3

8

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

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

是 Laravel 查询构建器(Lumen 使用)的高级 where 条件的文档。

于 2015-06-25T10:17:29.277 回答
5

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

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

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

于 2015-06-25T11:30:38.300 回答
0

关注 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();
于 2015-06-25T11:22:12.740 回答