尝试从两个数据库中读取以检查帐户是不是存在

Posted

技术标签:

【中文标题】尝试从两个数据库中读取以检查帐户是不是存在【英文标题】:Trying to read from two databases to check if an account exists尝试从两个数据库中读取以检查帐户是否存在 【发布时间】:2020-05-14 13:01:13 【问题描述】:

我正在尝试创建一个登录系统,该系统将根据他们的信息存储在哪个数据库中加载不同的主页 - 无论他们是客户还是企业。

我已经创建了我的注册,当我尝试只检查一个数据库时没问题,它会成功登录。

我不确定将这段代码放在哪里用于第二个数据库 - 每当我将它放在某个地方时,我都会收到错误消息,我为第一个数据库使用了类似的代码。

mysqli_stmt_bind_param($stmt2, "s", $ema);
                mysqli_stmt_execute($stmt2);
                $result2 = mysqli_stmt_get_result($stmt2);

这是完整的代码。

 elseif (!empty($ema) AND !empty($pas)) 
            $sql1 = "SELECT * FROM users1 WHERE email1=?;";
            $sql2 = "SELECT * FROM users2 WHERE email2=?;";
            $stmt1 = mysqli_stmt_init ($conn);
            $stmt2 = mysqli_stmt_init ($conn1);
            //Check if there was an error reading data from database
            if (!mysqli_stmt_prepare($stmt1, $sql1) AND !mysqli_stmt_prepare($stmt2, $sql2)) 
                header("Location: ../splash.php?error=sqlerror");
 else 
                mysqli_stmt_bind_param($stmt1, "s", $ema);
                mysqli_stmt_execute($stmt1);
                $result1 = mysqli_stmt_get_result($stmt1);

                if($row1 = mysqli_fetch_assoc($result1)) 
                    $pwdcheck1 = password_verify($pas, $row1['pwd1']);

                    if($pwdcheck1 == false) 
                        header("Location:../splash.php?error=wrongdetails");
                        exit();
                    //If a username and password in the business account correlate, then load the business index.
                     elseif ($pwdcheck1 == true)
                        session_start();
                        $_SESSION['userlog1'] = $row1['idUsers1'];
                        header("Location: ../../b/index1.php?login=success");
                        exit();
                    

                 elseif ($row2 = mysqli_fetch_assoc($result2)) 
                    $pwdcheck2 = password_verify($pas, $row2['pwd2']);

                    if($pwdcheck2 == false) 
                        header("Location: ../splash.php?error=wrongdetails");
                        exit();
                     elseif ($pwdcheck2 == true) 
                        session_start();
                        $_SESSION['userlog2'] = $row2['idUsers2'];
                        header("Location: ../../t/index2.php?login=success");
                        exit();
                    
                
            
         else 
            header("Location: ../splash.php?error=usernotfound");
        

谢谢!

【问题讨论】:

为什么一开始有两个用户表?应该只有 一个 您只需要一个用于登录的表,并且可能在该表中有一列说明它应该是哪种类型的登录 【参考方案1】:

事实上你应该有一个单独的用户表,问题来自于众多的条件,每一个都是无用的。

基本上,如果您需要从两个查询中获取结果,那么您应该立即一个一个地执行它们。 没有任何中间条件

        $sql = "SELECT * FROM users1 WHERE email1=?;";
        mysqli_prepare($conn, $sql);
        mysqli_stmt_bind_param($stmt, "s", $ema);
        mysqli_stmt_execute($stmt);
        $result = mysqli_stmt_get_result($stmt);
        $row = mysqli_fetch_assoc($result)

        if (!$row) 
            $sql = "SELECT * FROM users2 WHERE email2=?;";
            mysqli_prepare($conn, $sql);
            mysqli_stmt_bind_param($stmt, "s", $ema);
            mysqli_stmt_execute($stmt);
            $result = mysqli_stmt_get_result($stmt);
            $row = mysqli_fetch_assoc($result);
        

现在你可以检查密码了

if(($row && password_verify($pas, $row['pwd'])) 
    // OK
 else 
    // not OK

【讨论】:

我已经把我所有的东西都改成了一个数据库——我是个把事情复杂化的白痴。不过谢谢

以上是关于尝试从两个数据库中读取以检查帐户是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

我如何从客户端知道一个帐户是不是存在于 XMPP 服务器中?

使用 Hibernate,我如何检查尝试登录的用户是不是在数据库中有注册帐户?

使用 Python 检查标签是不是已存在于 Adwords 帐户中?

Postgres查询以查找连接表中是不是已存在组合

如何检查 Android SQLite 数据库中是不是存在表?

从 ContactProvider 读取生日,无效列