2011-02-25 4 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

$ 결과에 var_dump가 mysqli 결과 집합임을 확인합니까? – erisco

답변

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

10

대개 쿼리가 실패하고 쿼리 호출이 부울 FALSE (또는 일종의 오류 개체)를 반환하고 결과 집합 개체 인 것처럼 사용하려고 시도하여 오류가 발생합니다. 실제로 얻은 것을보기 위해 var_dump($result)과 같은 것을 시도해보십시오.

모든 데이터베이스 쿼리 호출 후에 오류를 확인하십시오. 쿼리 자체가 구문 론적으로 유효하더라도 어쨌든 오류가 발생하는 이유는 너무 많습니다. 매번 오류를 확인하면 어느 시점에서 많은 슬픔을 피할 수 있습니다.

3

을 변경합니다. 복잡한 쿼리를 코딩 할 때 예를 간단하게 보일 수 있지만

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

,이 오류의 확률이 높다. 단어 "table1"앞에 공간이 없습니다.

0

데이터베이스 연결을 이미 닫았는지 확인하십시오. 연결이 위쪽 줄에 있기 때문에 제 경우에는 오류가 발생했습니다.

+1

똑같은 것을 말하는 7 가지 (!) 세 질문에 이미 대답이 있는지 확인하십시오 –

관련 문제