Heim >Backend-Entwicklung >PHP-Tutorial >Warum erhalte ich in PHP den Fehler „Aufruf einer Member-Funktion Prepare() für ein Nicht-Objekt'?

Warum erhalte ich in PHP den Fehler „Aufruf einer Member-Funktion Prepare() für ein Nicht-Objekt'?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-25 20:07:12542Durchsuche

Why am I getting a

Aufruf einer Mitgliedsfunktion Prepare() bei einem Nicht-Objekt-Fehler in PHP

In PHP ist der „Aufruf einer Mitgliedsfunktion Prepare() bei einem Nicht-Objekt-Fehler Der Fehler „-object“ tritt auf, wenn Sie versuchen, die Methode „prepare()“ für eine Variable aufzurufen, die kein Objekt ist. Dies geschieht normalerweise, wenn die Variable nicht auf eine Instanz der MySQL-Klasse verweist oder wenn das MySQL-Objekt nicht ordnungsgemäß initialisiert wurde.

Verstehen des Problems

In Ihrem Mit dem bereitgestellten Code wird die Variable $DBH nicht als Objekt der MySQL-Klasse initialisiert, wenn Sie die Funktion selectInfo() aufrufen. Aus diesem Grund tritt der Fehler auf. Um dieses Problem zu lösen, können Sie einen der folgenden Ansätze verwenden:

Ansatz 1: Globalen Bereich verwenden

global $DBH;
function selectInfo($limit, $offset) {
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
}

Dieser Ansatz deklariert $DBH als globale Variable , sodass Sie innerhalb der Funktion selectInfo() darauf zugreifen können. Dies gilt jedoch nicht als Best Practice, da es zu einer globalen variablen Verschmutzung führen kann.

Ansatz 2: Übergeben Sie das Objekt als Parameter

function selectInfo($DBH, $limit, $offset) {
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
}
selectInfo($DBH, 10, 20);

Dieser Ansatz besteht direkt das mysqli-Objekt als Parameter für die Funktion selectInfo(). Es ist expliziter und stellt sicher, dass das Objekt ordnungsgemäß initialisiert wird.

Ansatz 3: Verwenden Sie eine Datenbank-Hilfsfunktion

function getDBH() {
    static $DBH = null;
    if (is_null($DBH)) {
        $DBH = new mysqli("host", "test", "123456", "dbname");
    }
    return $DBH;
}

function selectInfo($limit, $offset) {
    $DBH = getDBH();
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
}

Dieser Ansatz verwendet eine Hilfsfunktion zum Abrufen das mysqli-Objekt und initialisieren Sie es bei Bedarf. Es stellt sicher, dass das Objekt immer verfügbar ist, wenn selectInfo() aufgerufen wird.

Ansatz 4: Verwenden Sie eine Datenbankklasse

class Database {
    private $DBH;

    public function __construct($host, $user, $pass, $dbname) {
        $this->DBH = new mysqli($host, $user, $pass, $dbname);
    }

    public function prepare($sql) {
        return $this->DBH->prepare($sql);
    }
}

$db = new Database("host", "test", "123456", "dbname");
$stmt = $db->prepare("SELECT * FROM information LIMIT ?,?");

Dieser Ansatz kapselt die Datenbankverbindung innerhalb einer Klasse. Es bietet eine saubere und strukturierte Möglichkeit, auf Kontoauszüge zuzugreifen und diese vorzubereiten.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in PHP den Fehler „Aufruf einer Member-Funktion Prepare() für ein Nicht-Objekt'?. 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