Heim  >  Artikel  >  Backend-Entwicklung  >  Warum kommt es in PHP zum „Aufruf einer Member-Funktion „prepare()' für ein Nicht-Objekt' und wie kann ich das Problem beheben?

Warum kommt es in PHP zum „Aufruf einer Member-Funktion „prepare()' für ein Nicht-Objekt' und wie kann ich das Problem beheben?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-25 02:27:10411Durchsuche

Why Does

Aufruf der Member-Funktion „prepare()“ für ein Nicht-Objekt: PHP-Hilfe

Problem:

Der Fehler „Aufruf einer Member-Funktion Prepare() für ein Nicht-Objekt“ tritt auf, wenn versucht wird, eine Methode für ein Objekt aufzurufen, das dies nicht tut existieren.

Ursache:

Der bereitgestellte Codeausschnitt initialisiert die Variable $DBH als neues MySQLi-Verbindungsobjekt, kann sie jedoch nicht als Parameter übergeben oder als deklarieren eine globale Variable innerhalb der Funktion selectInfo(). Daher kann die Funktion nicht auf das Objekt zugreifen und der Fehler wird ausgegeben.

Lösung:

Um dieses Problem zu beheben, ziehen Sie die folgenden Optionen in Betracht:

  1. Verwenden Sie das Global Schlüsselwort:

    • function selectInfo($limit, $offset){
        global $DBH;
        $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
  2. Übergeben Sie die Verbindung als Parameter:

    • function selectInfo(MySQLi $DBH, $limit, $offset){
        $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
  3. Erstellen Sie eine Funktion zum Abrufen der Datenbankverbindung:

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

    Funktion selectInfo($limit, $offset){

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

    }

  4. Erstellen Sie eine Datenbank-Wrapper-Klasse:

    • 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. Verwenden Sie a Vorgefertigte Bibliothek oder Framework:

    • Erwägen Sie die Verwendung einer Bibliothek oder eines Frameworks, die den Datenbankzugriff verwaltet, wie Doctrine ORM, ADODB, oder ein vollwertiges Framework wie Zend.

Das obige ist der detaillierte Inhalt vonWarum kommt es in PHP zum „Aufruf einer Member-Funktion „prepare()' für ein Nicht-Objekt' und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn