>백엔드 개발 >PHP 튜토리얼 >PHP에서 \'비객체에 대한 prepare() 멤버 함수 호출\'이 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

PHP에서 \'비객체에 대한 prepare() 멤버 함수 호출\'이 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-25 02:27:10474검색

Why Does

비객체에서 prepare() 멤버 함수 호출: PHP 도움말

문제:

호출을 시도할 때 "비객체에서 prepare() 멤버 함수 호출" 오류가 발생합니다. 존재하지 않는 객체에 대한 메서드입니다.

원인:

제공된 코드 조각은 $DBH 변수를 새로운 MySQLi 연결 객체로 초기화하지만 전달에 실패합니다. 매개변수로 사용하거나 selectInfo() 함수 내에서 전역 변수로 선언합니다. 결과적으로 함수가 객체에 액세스할 수 없으며 오류가 발생합니다.

해결책:

이 문제를 해결하려면 다음 옵션을 고려하십시오.

  1. 글로벌 사용 키워드:

    • function selectInfo($limit, $offset){
        global $DBH;
        $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
  2. 연결 전달 매개변수:

    • function selectInfo(MySQLi $DBH, $limit, $offset){
        $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
  3. 데이터베이스를 가져오는 함수 만들기 연결:

    • function getDBH(){
        static $DBH = null;
        if (is_null($DBH)) {
            $DBH = new mysqli(...);
        }
        return $DBH;
      }

    function selectInfo($limit, $offset){

    $DBH = getDBH();
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");

    }

  4. 데이터베이스 래퍼 생성 수업:

    • class Database {
        private $conn;
      
        public function __construct(){
            $this->conn = new mysqli(...);
        }
      
        public function selectInfo($limit, $offset){
            $stmt = $this->conn->prepare("SELECT * FROM information LIMIT ?,?");
        }
  5. 미리 구축된 라이브러리 또는 프레임워크 사용:

    • 다음과 같이 데이터베이스 액세스를 처리하는 라이브러리나 프레임워크 사용을 고려해보세요. Doctrine ORM, ADODB 또는 Zend와 같은 완전한 프레임워크.

위 내용은 PHP에서 \'비객체에 대한 prepare() 멤버 함수 호출\'이 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.