복붙노트

치명적 오류 : 비 객체의 fetch_assoc () 멤버 함수 호출

PHP

치명적 오류 : 비 객체의 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 결과 집합이므로, 왜 이것이 작동하지 않는지에 대해 당황 스럽다.

해결법

  1. ==============================

    1.그것은 당신의 질문에 오류가 있었기 때문입니다. MySQli-> query ()는 오류가 발생하면 false를 반환합니다. 그것을 다음과 같이 변경하십시오 ::

    그것은 당신의 질문에 오류가 있었기 때문입니다. MySQli-> query ()는 오류가 발생하면 false를 반환합니다. 그것을 다음과 같이 변경하십시오 ::

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

    오류가있는 경우 예외가 발생합니다 ...

  2. ==============================

    2.대부분의 경우 쿼리가 실패하고 쿼리 호출이 부울 FALSE (또는 일종의 오류 개체)를 반환하고 결과 집합 개체 인 것처럼 사용하여 오류를 발생시킵니다. var_dump ($ result)와 같은 것을 시도하면 실제로 얻은 것을 볼 수 있습니다.

    대부분의 경우 쿼리가 실패하고 쿼리 호출이 부울 FALSE (또는 일종의 오류 개체)를 반환하고 결과 집합 개체 인 것처럼 사용하여 오류를 발생시킵니다. var_dump ($ result)와 같은 것을 시도하면 실제로 얻은 것을 볼 수 있습니다.

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

  3. ==============================

    3.내 쿼리에서 공백을 놓치고 이런 오류가 발생합니다.

    내 쿼리에서 공백을 놓치고 이런 오류가 발생합니다.

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

    예제가 단순 해 보이지만 복잡한 쿼리를 코딩 할 때이 오류가 발생할 확률은 높습니다. 단어 "table1"앞에 공간이 없습니다.

  4. ==============================

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

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

  5. from https://stackoverflow.com/questions/5121027/fatal-error-call-to-a-member-function-fetch-assoc-on-a-non-object by cc-by-sa and MIT license