치명적 오류 : 비 객체의 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.그것은 당신의 질문에 오류가 있었기 때문입니다. 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.대부분의 경우 쿼리가 실패하고 쿼리 호출이 부울 FALSE (또는 일종의 오류 개체)를 반환하고 결과 집합 개체 인 것처럼 사용하여 오류를 발생시킵니다. var_dump ($ result)와 같은 것을 시도하면 실제로 얻은 것을 볼 수 있습니다.
대부분의 경우 쿼리가 실패하고 쿼리 호출이 부울 FALSE (또는 일종의 오류 개체)를 반환하고 결과 집합 개체 인 것처럼 사용하여 오류를 발생시킵니다. var_dump ($ result)와 같은 것을 시도하면 실제로 얻은 것을 볼 수 있습니다.
모든 데이터베이스 쿼리 호출 후에 오류를 확인하십시오. 쿼리 자체가 구문 론적으로 유효하더라도 어쨌든 오류가 발생하는 이유는 너무 많습니다. 매번 오류를 확인하면 어느 시점에서 많은 슬픔을 피할 수 있습니다.
-
==============================
3.내 쿼리에서 공백을 놓치고 이런 오류가 발생합니다.
내 쿼리에서 공백을 놓치고 이런 오류가 발생합니다.
Ex: $sql= "SELECT * FROM"; $sql .= "table1";
예제가 단순 해 보이지만 복잡한 쿼리를 코딩 할 때이 오류가 발생할 확률은 높습니다. 단어 "table1"앞에 공간이 없습니다.
-
==============================
4.이미 데이터베이스 연결을 닫았는지 확인하십시오. 내 경우에는 연결이 위쪽 줄에 있기 때문에 오류가 발생했습니다.
이미 데이터베이스 연결을 닫았는지 확인하십시오. 내 경우에는 연결이 위쪽 줄에 있기 때문에 오류가 발생했습니다.
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
'PHP' 카테고리의 다른 글
$ .load 내부의 양식이 올바르게 게시되지 않습니다. (0) | 2018.09.08 |
---|---|
내 문자열의 특정 부분을 대체하는 방법? (0) | 2018.09.08 |
PHP associative arrays를 이용한 데카르트 제품 찾기 (0) | 2018.09.08 |
PHP로 날짜별로 파일 정렬 (0) | 2018.09.08 |
PHP에서 배열의 중복 값을 제거하는 방법 (0) | 2018.09.08 |