Vor langer Zeit, als ich gerade anfing, PHP und die Feinheiten des Kompilierens von MySQL-Abfragen zu lernen (2011), hatte ich die Idee, einen Wrapper für MySQLi wie Doctrine zu schreiben, um die Syntax des Zugriffs auf die Datenbank zu vereinfachen. Es ist bereits 2019 und ich habe beschlossen, mein Fahrrad zum Thema ORM zu teilen.
Dies ist also DBX - das MySQL-Datenbankmodul für PHP, das auf der MySQLi-Bibliothek basiert und auf Abfragen der Strukturbeschreibung der Tabellen und Felder der Datenbank in Form eines regulären Arrays mit der Funktion des statischen Abfrage-Caching und der automatischen Aktualisierung des statischen Hash basiert.
Im Gegensatz zur allgemeinen Vorliebe für PDO wurde die leichte MySQLi-Funktionalität gewählt, die weicher und einfacher zu programmieren ist und präziser in die vorgeschlagene DBX-API passt. Ich habe nicht einmal Composer verwendet, da ich keine Projekte habe, in denen ich andere Abhängigkeiten von Drittanbietern als selbst geschrieben verwende.
Betrachten Sie ein Beispiel für die Deklaration der Struktur einer einfachen Testdatenbank und ihrer Tabellen. Zuerst verbinden wir die Bibliothek selbst mit der Klasse und senden die Autorisierungsdaten an den Datenbankhost:
require_once './DBX.php'; $dbx_data = ['localhost', 'root', 'root', 'dbx_test', '8889'];
Stellen Sie sich nun vor, wir müssen eine Tabelle in der Datenbank mit der Syntax eines regulären PHP-Arrays beschreiben und erstellen:
<?php $table_1 = 'example';
Die Syntax ist hier einfach. Ich habe keine starke Eingabe verwendet und nur die Werte TEXT, NUMBER und TYMESTAMP ausgewählt. Für eine "steuerndere" Tabellenstruktur wird natürlich ein Schlüssel-ID-Feld mit automatischer Inkrementierung verwendet (ich habe in realen Projekten keine Fälle gesehen, in denen eine automatische Inkrementierung und ein Schlüssel das Design von Abfragen und Tabellenbeziehungen beeinträchtigen). Um anzuzeigen, ob das Feld leer sein kann, wird fill => true angegeben.
DataBaseX-Abfragetypen sind sehr einfach und enthalten grundlegende Methoden wie Auswählen, Einfügen, Löschen, Aktualisieren, Löschen, Abschneiden usw.
Beispiel: Eine Abfrage zum Erstellen einer Tabelle:
Oder eine Abfrage zum Hinzufügen von Daten und einer Spaltenstruktur könnte folgendermaßen aussehen:
Die Struktur des Arrays ermöglicht es eines Tages, die Datenbank zu beschreiben und anschließend nur die Wertefelder zu bearbeiten, um die Daten zu ändern, die zum Erstellen von Abfragen verwendet werden.
Hier ist ein Beispiel für eine Update-Anweisung, die ich im folgenden Beispiel entfernen werde:
Es schien mir, dass die Verwendung der Felder Criterion_field und Criterion_value das System kompliziert. Daher habe ich eine Abfrage erstellt, die entweder automatisch Daten zur Datenbank hinzufügt, wenn diese noch nicht erstellt wurden, oder vorhandene Daten aktualisiert. Ich habe diese Abfrage INJECT QUERY genannt und sie wird mit dem Präfix "in" aufgerufen:
Dies funktioniert auf einem niedrigen Niveau wie folgt:
INSERT INTO `revolver__comments` (`field_id`, `field_content`) VALUES ('5', 'TEST UPDATE') ON DUPLICATE KEY UPDATE `field_id`='5', `field_content`='TEST UPDATE';
Alle anderen Abfragen sind die einfachsten und es macht keinen Sinn, sie zu beschreiben (siehe Beispiele in der Testdatei index.php), aber ich kann nicht anders, als zu zeigen, wie die SELECT-Abfrage funktioniert:
<?php
Hier können Sie mit dem Präfix "s" die Abfrageparameter
s | field_id ( order ) | asc ( direction ) | 100 ( limit ) | 0 ( offset ) gruppieren .
DBX verfügt unter anderem über eine Besonderheit wie einen integrierten Dateicache, der auf der JSON-Statik basiert. Jede Änderungsanforderung (INSERT, UPDATE, DELETE, TRUNCATE) bewirkt, dass der Hash in der Cache-Hash-Tabelle berechnet wird, und aktualisiert automatisch den statischen Cache, sodass Sie nicht über die Belastung von SELECT-Abfragen nachdenken können.
In Zukunft plane ich, die DBX-Engine zu entwickeln und die Funktionen des SQL-Abfrage-Designers mithilfe des Konfigurationssystems UNION und JOIN zu erweitern sowie neue Datenbankunterstützung von MySQL 8 basierend auf dem JSON-Strukturtyp hinzuzufügen.
Jetzt wird DBX in meinem
RevolveR- Content-Management-System verwendet und weist gute Eigenschaften auf (die gesamte Site, sofern ein aktualisierter Cache vorhanden ist, wird mit einer Abfrage an die Datenbank initialisiert und belegt etwa 0,7 MB Interpreter-RAM). Für mich ist es auch sehr praktisch, die gesamte Datenbankstruktur in einer separaten Datei anzuzeigen, was manchmal den Aufbau und das Design neuer Module beschleunigt.
Projekt-Repository: DBX v1.1.1 auf GitHub .