Aktueller Standort: Startseite> Neueste Artikel> In eine universelle Datenzugriffsschicht einschließen

In eine universelle Datenzugriffsschicht einschließen

M66 2025-05-17

Bei der Entwicklung von PHP -Anwendungen sind MySQLI -Erweiterungen eine häufige Möglichkeit, mit MySQL -Datenbanken zu interagieren. Wenn das Projekt weiter erweitert wird, kann die Verwendung von MySQLI -Funktionen direkt zu einer Duplikation des Codes, einer hohen Kopplung und der schwer zu verwaltenden. Um die Wiederverwendbarkeit und Wartbarkeit der Code zu verbessern, können wir die Funktion mySQLI_Result in eine gemeinsame Datenzugriffsschicht einschließen.

In diesem Artikel wird vorgestellt, wie Sie die Funktion mySQLI_Result incapsuliert und Codebeispiele bereitstellen, mit denen Sie eine effiziente und leicht zu kontrollierende Datenzugriffsschicht erstellen können.

1. Entwurfsziele der Datenzugriffsschicht

Der Zweck der Datenzugriffsschicht besteht darin, Datenbankvorgänge von der Geschäftslogik zu trennen, damit die Zugriffslogik der Datenbank nicht direkt in der Geschäftsordnung der Anwendung angezeigt wird. Durch die Einkapselung der Datenbankvorgänge kann die Wiederverwendbarkeit und Wartbarkeit des Codes verbessert werden, und die Schwierigkeit, die Datenbank in der späteren Phase zu ersetzen, kann reduziert werden.

Hier sind einige Punkte zu berücksichtigen, um eine Datenzugriffsschicht zu entwerfen:

  • Verknüpfung von Datenbankverbindungen : Vermeiden Sie das wiederholte Schreiben von Verbindungscode jedes Mal, wenn Sie die Datenbank betreiben.

  • Vereinfachen Sie die Abfrageergebnisverarbeitung : Kapitulieren Sie den Betrieb von MySQLI_Result und Prozessabfrage auf einheitliche Weise.

  • Unterstützung von CRUD -Operationen : Unterstützen Sie gemeinsame Ergänzung, Löschung, Änderung und Überprüfungsvorgänge.

  • Verbesserung der Code -Wiederverwendbarkeit : Durch die Kapselung ist die Wiederverwendbarkeit des Datenbankoperationscode höher und die Code -Redundanz reduziert.

2. Erstellen Sie eine Datenbankklasse

Zunächst müssen wir eine Datenbankklasse erstellen, um die Verbindungs- und Abfragebetriebe der Datenbank zu verwalten.

 class Database {
    private $connection;
    
    // Konstruktor initialisiert die Datenbankverbindung
    public function __construct($host, $user, $password, $dbname) {
        $this->connection = new mysqli($host, $user, $password, $dbname);
        
        if ($this->connection->connect_error) {
            die("Verbindung ist fehlgeschlagen: " . $this->connection->connect_error);
        }
    }

    // Eine Frage ausführen,Rückgabeergebnissatz
    public function query($sql) {
        $result = $this->connection->query($sql);
        if (!$result) {
            die("Abfrage fehlgeschlagen: " . $this->connection->error);
        }
        return $result;
    }

    // Schließen Sie die Datenbankverbindung
    public function close() {
        $this->connection->close();
    }
}

Im obigen Code umfassen wir eine Datenbankklasse mit einem Konstruktor zur Initialisierung der Datenbankverbindung und eine Abfragethode zum Ausführen von SQL -Abfragen und zur Rückgabe des Ergebnissatzes.

3.. Kapitulieren Sie das Ergebnissatz von Mysqli_Result

MySQLI_Result ist ein Objekt in MySQLI , mit dem die Ergebnisse von Abfragen gelagert werden. Wenn wir die Datenzugriffsschicht erstellen, müssen wir normalerweise mySQLI_Result zusammenfassen, um den Betrieb des Ergebniss präziser zu gestalten.

Hier ist ein Codebeispiel, wie MySQLi_Result in Zusammenhang steht:

 class DbResult {
    private $result;

    // Der Konstruktor erhält Abfrageergebnisse
    public function __construct($result) {
        $this->result = $result;
    }

    // Holen Sie sich alle Ergebnisse
    public function fetchAll() {
        $rows = [];
        while ($row = $this->result->fetch_assoc()) {
            $rows[] = $row;
        }
        return $rows;
    }

    // Erhalten Sie Einzelzeilenergebnisse
    public function fetchOne() {
        return $this->result->fetch_assoc();
    }

    // Holen Sie sich die Anzahl der Zeilen
    public function numRows() {
        return $this->result->num_rows;
    }
}

Im obigen Code verkauft die DBRESULT -Klasse das Objekt mySQLI_Result und enthält die folgenden Methoden:

  • Fetchall () : Holen Sie sich alle Abfragergebnisse.

  • Fetchone () : Erhalten Sie das Ergebnis einer einzelnen Abfrage.

  • Numrows () : Gibt die Anzahl der Zeilen im Abfrageergebnis zurück.

4. Beispiel für die Datenzugriffsschicht

Durch Kombination der Datenbankklasse und der Ergebniskapselungsklasse der Ergebnismenge können wir eine vollständige Datenzugriffsschicht erstellen, wie unten gezeigt:

 class DataAccessLayer {
    private $db;

    // Konstruktor initialisiert die Datenbankverbindung
    public function __construct($host, $user, $password, $dbname) {
        $this->db = new Database($host, $user, $password, $dbname);
    }

    // Fragen Sie die Daten ab und geben Sie den eingekapselten Ergebnissatz zurück
    public function fetchData($sql) {
        $result = $this->db->query($sql);
        $dbResult = new DbResult($result);
        return $dbResult;
    }

    // Daten einfügen
    public function insertData($sql) {
        return $this->db->query($sql);
    }

    // Daten aktualisieren
    public function updateData($sql) {
        return $this->db->query($sql);
    }

    // Daten löschen
    public function deleteData($sql) {
        return $this->db->query($sql);
    }

    // Schließen Sie die Verbindung
    public function close() {
        $this->db->close();
    }
}

In diesem Beispiel verkauft die DataAccessLayer -Klasse gemeinsame Datenbankvorgänge wie Abfrage, Einfügen, Aktualisieren und Löschen. Wir verwenden die DBRESULT -Klasse, um die Abfrageergebnisse zu verkapulieren, wodurch der Betrieb der Ergebnisse bequemer wird.

5. Verwenden Sie die Datenzugriffsschicht

Jetzt können wir die eingekapselte Datenzugriffsschicht in unserer Geschäftsordnung verwenden:

 // Erstellen Sie ein Datenbankzugriffsobjekt
$dal = new DataAccessLayer('localhost', 'root', '', 'test_db');

// Abfragedaten
$sql = "SELECT * FROM users";
$dbResult = $dal->fetchData($sql);

// Abfragenergebnisse erhalten
$users = $dbResult->fetchAll();
foreach ($users as $user) {
    echo $user['username'] . "<br>";
}

// Schließen Sie die Datenbankverbindung
$dal->close();

Auf diese Weise können wir Datenbankvorgänge problemlos ausführen, ohne wiederholt Logik wie Verbindungen, Abfragenergebnisse usw. auf jeder Seite zu schreiben.

6. Zusammenfassung

Durch die Einkapselung der Ergebnis -Set und der Datenbankverbindung von MySQLI_Result erstellen wir eine gemeinsame Datenzugriffsschicht. Diese Datenzugriffsschicht macht Datenbankvorgänge prägnanter, wiederverwendbarer und verbessert die Wartbarkeit des Codes. Sie können diese Datenzugriffsschicht entsprechend Ihren Geschäftsanforderungen weiter erweitern und mehr Datenbankoperationen wie Transaktionsmanagement, Stapelinsertion usw. unterstützen.

Wenn Sie Datenbankverbindungen flexibler verwalten möchten, können Sie ein Singleton -Muster einführen, um das Erstellen von Datenbankverbindungen mehrmals zu vermeiden.

Ich hoffe, dieser Artikel kann Ihnen helfen, eine effizientere und wartbarere Datenbankbetriebsebene aufzubauen und Ihre Entwicklungseffizienz zu verbessern.