0

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

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。

4

1 回答 1

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 中,直接运行到数据库中。

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

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

祝你好运。

于 2012-05-02T16:48:39.760 回答