Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Where条款中的流明和/或条件_Php_Laravel_Lumen - Fatal编程技术网

Php Where条款中的流明和/或条件

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)

我尝试在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并绕过登录。这个问题出了什么问题


当我从查询中删除
或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();