PDO - >查询返回null

时间:2012-05-02 09:38:50

标签: php pdo

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

echo $querySessions == null;回声1

然后

  

致命错误:在非对象中调用成员函数fetchAll()   /path/to/file.php在线(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。

1 个答案:

答案 0 :(得分:1)

问题在于,与$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()); },并查看输出内容。
  2. 获取$SID的查询和值,并尝试将其直接运行到phpmyadmin数据库中。
  3. 请注意,致命错误还与您的查询返回false而不是对象的事实有关。这些错误只是说您将$querySession视为对象,但事实并非如此。

    如需更多信息,请发表评论,我会回答。

    祝你好运。