繁体   English   中英

PDO->查询返回null

[英]PDO ->query returns null

$dbh->query适用于$queryUser = $dbh->query ,但不适用于$querySessions = $dbh->query$querySessions为null,

echo $querySessions == null; 回声1

接着

致命错误:调用/path/to/file.php中非对象上的成员函数fetchAll()在行上(while(count($ querySessions-> fetchAll())!= 0))

        if($_POST['loginbtn'])
        {
            $User = $_POST['user'];
            $Pass = md5(md5("salt" . $_POST['pass'] . "salt2"));
            if($User)
            {
                if($_POST['pass'])//not $Pass because thats hashed
                {
                    $queryUser = $dbh->query("SELECT * FROM `Users` WHERE `UserName` = '" . base64_encode($User) . "' LIMIT 1");
                    $Record = $queryUser->fetch();
                    if($Pass != $Record["Password"])
                    {
                        echo "Incorect password.";
                    }
                    else
                    {
                        if($Record["Banned"] == 1)
                        {
                            echo "Sorry, your banned.";
                        }
                        else
                        {
                            if($Record["NeedsActivation"] == 1)
                            {
                                echo "You must activate your account before you can login.";
                            }
                            else
                            {
                                $SID = md5(rand(0,0x7fffffff) . "salt3");

                                $querySessions = $dbh->query("SELECT * FROM `Sessions` WHERE `ID` = " . $SID . " LIMIT 1");
                                echo $querySessions == null;
                                while(count($querySessions->fetchAll()) != 0)
                                {
                                    $SID = md5(rand(0,0x7fffffff) . "salt2");

                                    $querySessions = $dbh->query("SELECT * FROM `Sessions` WHERE `ID` = " . $SID . " LIMIT 1");
                                }
                                $_SESSION['id'] = $SID;
                                $dbh->query("INSERT INTO  `godzchea_Site`.`Sessions` (`ID` ,`UserID`)VALUES ('" . $SID . "',  '" . $Record["ID"] . "');");
                                echo base64_decode($Record["UserName"]) . " Logged in.";
                            }
                        }
                    }
                }
                else
                {
                    echo "You must enter your password.";
                }
            }
            else
            {
                echo "You must enter your username.";
            }
        }

谁能看到为什么将其设置为null,以及是否有更好的循环方法,直到获得空id。

问题在于这样一个事实,即与$querySession关联的查询失败。 您的查询中可能存在错误,因为《手册》说的是:

PDO::query() returns a PDOStatement object, or FALSE on failure.

我不确定,但是也可能是找不到行。 我可以给您的建议是,找出真正的错误是:

  1. 您将所有PDO代码放在一个try catch块中,例如: try{/*code in here*/}catch(PDOException $e){ exit($e->getMessage()); } try{/*code in here*/}catch(PDOException $e){ exit($e->getMessage()); } ,看看它的输出。
  2. 获取查询和$SID的值,然后尝试将其运行到phpmyadmin中,直接运行到数据库中。

请注意,致命错误还与查询返回false而不是对象的事实有关。 该错误仅表示您将$querySession视为对象,但事实并非如此。

有关更多信息,请发表评论,我会回答。

祝好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM