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