MyISQL aus externen Klassen in PHP nutzen
Ihre Migration von PHP 5.6 auf 7.0 mit der entsprechenden Datenbankanpassung von MySql auf Mysqli hat einiges gebracht Herausforderungen. Hier gehen wir auf die zugrunde liegenden Probleme ein und bieten alternative Lösungen an.
Die Struktur verstehen
Zunächst haben Sie eine Datenbankklasse mit privaten Eigenschaften und einen Konstruktor dafür entwickelt eine Verbindung herstellen. Dieses Setup führt jedoch zu einer Trennung, wenn von anderen Klassen aus darauf zugegriffen wird.
Zweitens haben Sie eine API-Klasse, die für die Interaktion mit der Datenbank konzipiert ist, aber innerhalb ihres Konstruktors eine separate neue Instanziierung für die Datenbankverbindung verwendet.
Ursache des Fehlers: InternalInconsistencies
Wenn Sie in der API-Klasse auf $this->db->conn verweisen, wird Null abgerufen, was zu einem internen Serverfehler führt. Dies liegt daran, dass $this->db nur bei der Objekterstellung initialisiert wird und keine Verbindungsdaten behält.
Vorgeschlagene Lösung: Abhängigkeitsinjektion
Stattdessen Wenn Sie für jede Klasse eine separate Instanziierung wünschen, sollten Sie die Abhängigkeitsinjektion in Betracht ziehen. So geht's:
Durch die Übernahme dieser Prinzipien können Sie MySQLi effektiv über mehrere Klassen hinweg in Ihrer PHP-Anwendung nutzen.
Beispielimplementierung
Datenbank .php:
<code class="php">$db = new mysqli("localhost", "DBUserName", "UserPassword", "SelectedDB"); $db->set_charset('utf8mb4');</code>
myapi.php:
<code class="php">class MyAPI { protected $db; public function __construct($db) { $this->db = $db; } // ... Rest of your code }</code>
app.php:
<code class="php">require 'database.php'; require 'myapi.php'; $api = new MyAPI($db); // Utilize the API as intended</code>
Diese Umstrukturierung stellt einen konsistenten Zugriff auf Datenbankressourcen in Ihrer gesamten Anwendung sicher und verringert die aufgetretenen internen Serverfehler.
Das obige ist der detaillierte Inhalt vonSo greifen Sie über externe Klassen in PHP auf MySQLi zu: Überwinden interner Serverfehler mit Dependency Injection. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!