2017-01-01 128 views
0

最近,我發現自己在這種困境,而我的編程應用程序的一大塊。 我得到以下錯誤:Cannot use object of type mysqli_result as array
但是,我的應用程序打開的結果到一個數組試圖要麼返回它或回聲它。代碼在方法定義內。是的,我已盡全力,包括搜索本網站,包括標記爲重複的所有問題。沒有awnsers。使用mysqli-> FETCH_ASSOC() - 無法使用類型mysqli_result的對象數組

下面是代碼後,我嘗試瞭解決方案:

public function lookupEmailByUsername($username) 
     { 
      $database = new mysqli(APP_DB_HOSTNAME, APP_DB_USERNAME, APP_DB_PASSWORD, APP_DB_DATABASE, APP_DB_PORT); 
      $database->select_db("users"); // better safe than sorry 

      $row = $database->query("SELECT * FROM `users` WHERE `username` = \"$username\";"); 

      if($row->num_rows == 1){ 
       $finalRow = $database->query("SELECT * FROM `users` WHERE `username` = \"$username\";"); 
       $finalRow->fetch_array(); 

       $finalresult = $finalRow['email']; 

       return $finalresult; // Line where error occurs 
      } else { 

       $Logger = new logger(); 
       $Logger->logEvent("ERROR", "Could not find user $username for reverse lookup", true, 1); 
       return null; 
      } 

     } 

logger()是我的日誌類,它有沒有問題。

代碼之前,我想一個解決方案:

public function lookupEmailByUsername($username) 
     { 
      $database = new mysqli(APP_DB_HOSTNAME, APP_DB_USERNAME, APP_DB_PASSWORD, APP_DB_DATABASE, APP_DB_PORT); 
      $database->select_db("stories_users"); 

      if(!$database->query("SELECT * FROM `users` WHERE `username` = \"$username\";")){ 
       $logger = new logger(); 
       $logger->logEvent("ERROR", "Unable to execute search SQL for email lookup"); 
       return null; 
      } 
      $row = $database->query("SELECT * FROM `users` WHERE `username` = \"$username\";"); 


      if($row->num_rows == 1){ 
       $row->fetch_assoc(); 

       return $row['email']; 
      } else { 

       $Logger = new logger(); 
       $Logger->logEvent("ERROR", "Could not find user $username for reverse lookup", true, 1); 
       return null; 
      } 

     } 

當我return $row['email'],出現錯誤,但。 做一個變種轉儲像這樣:var_dump($row->num_rows)返回1,這正是我所期待的。爲什麼?因爲如果有一行,就意味着有一個用戶。而我的應用不允許重複的用戶。這意味着SQL是正確的。

爲什麼return $row['email']在我試圖使用fetch_arrayfetch_assoc時輸出該錯誤?有一行如上所述,fetch_assoc應該把它變成一個數組。

OPS:我剛剛發現row不是數組:

if(is_array($row)){ 
        echo "row is array"; 
        exit; 
       } 
       else { 
        echo "row is not array"; 
        exit; 
       } 

但我用fetch_assoc。對不起,我是MySQLi面向對象部分的新手。

+0

我不認爲這個問題是一個重複的,因爲對這一問題的awnser告訴OP使用''fetch_array'',這是我正是這裏使用。 –

回答

0

According to the documentation,mysqli_result::fetch_assoc()返回關聯數組。它不會將mysqli_result實例轉換爲一個實例。所以,你要存儲在一個變量從fetch_assoc返回的值(你可以使用$row,這就需要在你的代碼無需進一步修改)。

+0

第一個用戶貢獻的註釋對我的幫助比你的答案更多。沒有人真的想幫忙,但那個人做到了。感謝您向我介紹文檔的最後一頁,我完全錯過了。如果可以的話+1。 –

+0

抱歉,我個人無法幫助你,但我很高興你明白了。 :) – Bytewave

相關問題