Heim > Backend-Entwicklung > PHP-Tutorial > 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
Freigeben: 2024-11-25 02:27:10
Original
473 Leute haben es durchsucht

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 ?,?");
      Nach dem Login kopieren
  2. Übergeben Sie die Verbindung als Parameter:

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

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

    Funktion selectInfo($limit, $offset){

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

    }

  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 ?,?");
        }
      Nach dem Login kopieren
  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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage