簡體   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