0

$dbh->queryでは動作しますが、では動作し$queryUser = $dbh->queryません。null です。$querySessions = $dbh->query$querySessions

echo $querySessions == null;エコー 1

その後

致命的なエラー: 行 (while(count($querySessions->fetchAll()) != 0)) の /path/to/file.php の非オブジェクトでメンバー関数 fetchAll() を呼び出します

        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コードを次のようなtrycatchブロック内に配置し、try{/*code in here*/}catch(PDOException $e){ exit($e->getMessage()); }出力内容を確認します。
  2. クエリとの値を取得$SIDし、データベースに直接、phpmyadminで実行してみてください。

致命的なエラーは、クエリがオブジェクトではなくfalseを返すという事実にも関連していることに注意してください。そのエラーは、あなたが$querySessionオブジェクトとして扱っていることを示しているだけですが、そうではありません。

詳細については、コメントを残してください。回答します。

幸運を。

于 2012-05-02T16:48:39.760 に答える