有没有办法使用 MySQL 一次验证多件事


Is there a way to verify more than one thing at once in one go with MySQL?

我正在构建一个登录函数,用于检查用户名和密码组合是否位于数据库中。

但是,当我这样做时,我还想检查用户名和密码组合是否是活动帐户。因此,我将能够告诉用户他们是否因为帐户未激活或密码不正确而无法登录。

我想知道是否有办法一次完成两项检查。目前,我已经设置了一个顺序搜索,首先获取通行证/用户组合,然后检查他们的帐户是否处于活动状态。这样,我将单次登录的查询量增加了一倍,不好。

这是我到目前为止所拥有的。

$selectUser = "SELECT FirstName, LastName FROM User WHERE Username=? And Pass=?";
            $loginStmt = mysqli_prepare($link, $selectUser);
            mysqli_stmt_bind_param($loginStmt, 'ss', $u1, $p1);
            if (!mysqli_stmt_execute($loginStmt))
            {
                mysqli_close($link);
                die("The system is not available, try again later");
            }
            mysqli_stmt_store_result($loginStmt);
            $row_cnt = mysqli_stmt_num_rows($loginStmt);
            if ($row_cnt == 0)
            {
                $Error .= 'Invalid Username/Password. <br />';
            }
            else
            {
                $isActive = "SELECT isActivated FROM User WHERE Username=? And Pass=?";
                $isActiveStmt = mysqli_prepare($link, $isActive);
                mysqli_stmt_bind_param($isActiveStmt, 'ss', $u1, $p1);
                mysqli_stmt_bind_result($isActiveStmt,$active);
                mysqli_stmt_fetch($isActiveStmt);
                if($active != 1)
                {
                    $Error = 'Your account has not been activated yet, check email or contact admin'.
                }
                else
                {
                    mysqli_stmt_bind_result($loginStmt, $lname, $fname);
                    mysqli_stmt_fetch($loginStmt);
                    $_SESSION['Name'] = $lname." ".$fname; 
                    $_SESSION['Username'] = $txtUsername;
                    header("Location: Default.php");
                    //mysqli_close($link);
                    //$Error = "success";
                    exit();
                }
            }

你只需要运行第二个 SQL选择已激活 来自用户 其中用户名=?和通行证=?

如果用户名和 pass 不存在,则 $row_cnt 将为 0。如果它不为 0,您可以查看 isActivated 列。