2011-02-25 91 views
25

我試圖執行一些查詢以獲取有關某些圖像的信息頁面。我寫了一個功能致命錯誤:調用非對象的成員函數fetch_assoc()

function get_recent_highs($view_deleted_images=false) 
{ 
    $lower = $this->database->conn->real_escape_string($this->page_size * ($this->page_number - 1)); 
    $query = "SELECT image_id, date_uploaded FROM `images` ORDER BY ((SELECT SUM(image_id=`images`.image_id) FROM `image_votes` AS score)/(SELECT DATEDIFF(NOW() , date_uploaded) AS diff)) DESC LIMIT " . $this->page_size . " OFFSET $lower"; //move to database class 
    $result = $this->database->query($query); 
    $page = array(); 
    while($row = $result->fetch_assoc()) 
    { 
     try 
     { 
      array_push($page, new Image($row['image_id'], $view_deleted_images)); 
     } 
     catch(ImageNotFoundException $e) 
     { 
      throw $e; 
     } 
    } 
    return $page; 
} 

根據它們的流行度來選擇這些圖像的一個頁面。我已經編寫了一個Database類來處理與數據庫的交互,還有一個Image類,它包含關於圖像的信息。當我嘗試運行這個時,我得到一個錯誤。

Fatal error: Call to a member function fetch_assoc() on a non-object 

$result是mysqli的結果集,所以我很困惑,爲什麼這是行不通的。

+0

$ result上的var_dump證實它是一個mysqli結果集? – erisco 2011-02-25 18:21:56

回答

34

這是因爲您的查詢中存在錯誤。 MySQli->query()將在錯誤時返回false。將其更改爲類似::

$result = $this->database->query($query); 
if (!$result) { 
    throw new Exception("Database Error [{$this->database->errno}] {$this->database->error}"); 
} 

這應該拋出一個異常,如果有一個錯誤......

+2

'致命的錯誤:當不在對象上下文中時使用$ this' – User 2014-09-21 00:50:32

10

您的查詢很可能失敗,並且查詢調用返回布爾值FALSE(或某種錯誤對象),然後嘗試使用它,就好像是resultset對象一樣,導致錯誤。嘗試像var_dump($result)這樣的東西,看看你真的得到了什麼。

每次數據庫查詢調用後檢查錯誤。即使查詢本身在語法上是有效的,但它的失敗原因太多了 - 每次檢查錯誤都會在某些時候爲您節省很多的麻煩。

3

我碰巧錯過我的查詢空間和這個錯誤出現。

Ex: $sql= "SELECT * FROM"; 
$sql .= "table1"; 

雖然這個例子看起來很簡單,但在編碼複雜查詢時,這個錯誤發生的概率很高。我在單詞「table1」之前缺少空格。

0

請檢查您是否已關閉數據庫連接。 在我的情況下,我得到的錯誤,因爲連接上線。

+1

請檢查是否已經有一個可接受的答案來解答七(!)年的問題,它會告訴你同樣的事情 – 2018-02-02 08:20:00

相關問題