有没有办法一次性使用MySQL验证多个东西?

时间:2013-02-03 20:01:09

标签: php mysql activerecord login

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

但是当我这样做时,我还要检查用户名和密码组合是否是活动帐户。因此,我可以告诉用户他们是否因为他们的帐户未处于活动状态或他们的密码错误而无法登录。

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

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

$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();
                }
            }

1 个答案:

答案 0 :(得分:1)

您只需要运行第二个SQL SELECT isActivated FROM User WHERE Username =?并且通过=?

如果用户名和密码不存在,$ row_cnt将为0。 如果它不是0,你可以查看isActivated列。