> 백엔드 개발 > PHP 튜토리얼 > mysqli::query()가 'Couldn't fetch mysqli' 데이터베이스 연결 오류와 함께 실패하는 이유는 무엇입니까?

mysqli::query()가 'Couldn't fetch mysqli' 데이터베이스 연결 오류와 함께 실패하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-07 21:05:14
원래의
783명이 탐색했습니다.

Why is my mysqli::query() failing with a

Mysqli::query(): 데이터베이스 연결 오류

"mysqli::query(): mysqli를 가져올 수 없습니다." 오류 일반적으로 데이터베이스 연결에 문제가 있음을 나타냅니다. 다음 단계에서는 문제를 설명하고 제공된 코드 조각을 기반으로 솔루션을 제공합니다.

  1. Connection: 연결 파일에서 new mysqli()의 @ 기호는 다음과 같이 사용됩니다. 오류 보고를 억제합니다. 이는 오류 표시를 방지하기 위한 것이지만 오류를 무시하는 것보다 적절하게 처리하는 것이 좋습니다.
  2. 닫기: 클래스 생성자에서 $DBConnect를 클래스 멤버 변수에 할당합니다. 이렇게 하면 클래스 전체에서 연결 개체를 사용할 수 있습니다. 그러나 __destruct() 메서드에서는 연결 오류가 없으면 연결을 닫습니다. 이는 연결을 더 이상 사용할 수 없기 때문에 후속 쿼리가 실패하기 때문에 문제가 됩니다.
  3. 다시 열기: __wakeup() 메서드는 직렬화 후 연결을 다시 열기 위한 것입니다. 그러나 클래스가 인스턴스화될 때 호출되지 않습니다. 이는 연결이 닫힌 상태로 유지된다는 것을 의미합니다.

해결책:

  1. @ 기호를 제거하세요. 연결 개체 인스턴스화에서. 보다 강력한 방식으로 오류를 처리합니다.
  2. 연결 종료 코드를 별도의 메소드로 이동하고 연결을 종료해야 하는 경우에만 호출하세요.
  3. __wakeup() 메소드가 호출되는지 확인하세요. 클래스가 인스턴스화될 때(예: 클래스에서 객체를 검색할 때) 세션).

수정된 코드:

// Connection file
$DBConnect = new mysqli("localhost", "root@localhost", NULL, "Ladle");

// Check for connection error
if ($DBConnect->connect_errno) {
    $ErrorMsgs[] = "The database server is not available. Connect Error is " . $DBConnect->connect_errno . " " . $DBConnect->connect_error . ".";
}

// Class
class EventCalendar {
    private $DBConnect = NULL;

    function __construct() {
        include("inc_LadleDB.php");
        $this->DBConnect = $DBConnect;
    }

    function __destruct() {
        // Close the connection only if it's not closed already
        if (!$this->DBConnect->connect_error) {
            $this->DBConnect->close();
        }
    }

    function __wakeup() {
        // Include the database connection data
        include("inc_LadleDB.php");
        $this->DBConnect = $DBConnect;
    }
    
    // Event adding method
    // ...
}
로그인 후 복사

위 내용은 mysqli::query()가 'Couldn't fetch mysqli' 데이터베이스 연결 오류와 함께 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿