2012-05-02 51 views
0

$dbh->query作品,但不是在$querySessions = $dbh->query$querySessions爲null,

echo $querySessions == null;回聲1

然後

Fatal error: Call to a member function fetchAll() on a non-object in /path/to/file.php on line (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."; 
      } 
     } 

可以任你看看爲什麼它被設置爲空, 以及是否有更好的方式來循環,直到我得到一個空的ID。

+1

能否請您做'$ querySessions'的'的var_dump()'? – Shoe

+0

@jeffpigarelli echo var_dump($ querySessions);? 「布爾(假)」 – godzcheater

回答

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作爲一個對象,但事實並非如此。

欲瞭解更多信息,只是發表評論,我會回答。

祝你好運。

+0

謝謝夥計,但它現在的工作,我不得不添加'周圍 $ querySession = $ dbh->查詢(「SELECT * FROM'godzchea_Site'.'Sessions'其中'ID' ='「。$ SID。」'LIMIT 1「); 說不上來,如果我的主機更新的東西嗎?因爲幾個星期前我編寫代碼 – godzcheater

+0

@ godzcheater時,我想你是Stack Overflow的新手。如果這個答案以任何方式幫助你,你應該接受它(選擇點數櫃檯下的勾號)以幫助其他人。 – Shoe

+0

謝謝你,雖然它不一定是正確的答案 – godzcheater