Einfache, klassenbasierte PHP-Abfragen

Obwohl es normalerweise ratsam ist, eine Art Framework oder CMS zu verwenden, ist ein Projekt manchmal so klein, dass diese Optionen die Entwicklung beeinträchtigen. Auch bei kleineren Projekten sollte die Trennung von Präsentationselementen von der Backend-Abfrage nicht ignoriert werden. In diesem Lernprogramm erfahren Sie, wie Sie eine grundlegende, klassenbasierte Abfrage-Engine für PHP und MySQL erstellen.


Schritt 1. Richten Sie das Projekt ein

Als erstes wollen wir bestimmte Dateien und Verzeichnisse erstellen. So setze ich gerne meine Projekte ein. Natürlich können Sie den Namen und die Struktur nach Ihren Wünschen ändern. Stellen Sie nur sicher, dass Sie die Anforderungen auch später ändern.

Verzeichnisse erstellen

Wir brauchen ein neues Verzeichnis, um alles zu speichern. In diesem Fall habe ich es angerufen tut. Darin habe ich meine Konfigurationsdateien in einem Verzeichnis abgelegt conf. Dann werde ich eine machen inc verzeichnis (short für include) und fügen Sie ein "class" -Verzeichnis in dieses Verzeichnis ein.

Dateien hinzufügen

Dann drinnen / conf, wir werden machen config.php. Innerhalb / inc / class wir werden machen DAL.php. Schließlich werden wir im root-Verzeichnis machen index.php.

DAL steht für "Data Access Layer" oder "Data Access Link".

In einer mehrschichtigen Architektur werden im Wesentlichen Datenbankabfrageergebnisse in Objekte und umgekehrt konvertiert.


Schritt 2. Richten Sie die Datenbank ein

Wir müssen eine Datenbank erstellen und mit einigen Daten füllen. In diesem Tutorial handelt es sich lediglich um eine Zwei-Tabellen-Datenbank mit einer einzigen Eins-zu-Viele-Beziehung. Dies ist nur so, dass wir zeigen können, dass unsere Abfrage-Engine mindestens eine Beziehung umfasst.

Tabellen erstellen

Lassen Sie uns also in einer Datenbank namens "tut" eine Tabelle mit dem Namen "tut" erstellen macht und eine Tabelle genannt Modelle. Das macht Die Tabelle enthält die Felder "id" und "name" und die Modelle Tabelle hat Felder "ID", "Make" und "Name".

Fügen Sie einige Daten hinzu

Jetzt können wir nur einige Marken (wie Ford, Chevy usw.) als Daten in der Markentabelle hinzufügen und einige Modelle, für die diese Hersteller verantwortlich sind.

In diesem Lernprogramm wird vorausgesetzt, dass Sie sich mit Datenbanken und SQL auskennen, daher werde ich nicht näher auf die Einrichtung von Beziehungen / Fremdschlüsseln eingehen.


Schritt 3. Die Datenbankverbindung

Normalerweise arbeite ich nicht gern mit rohen Konstanten in PHP. Ich werde in der Regel eine Reihe von Dingen definieren und dann einige Funktionen erstellen, um diese Konstanten einzuhaken. Lassen Sie uns für dieses Beispiel einfach die Dinge einfach halten und die Konstanten verwenden.

Definieren Sie Verbindungsvariablen

In unserer /conf/config.php Datei, lassen Sie uns unsere Datenbankverbindungsvariablen einrichten. Lassen Sie uns, wenn wir gerade dabei sind, ein Include in unser DAL.php-Skript einfügen.

 

Dieses Setup setzt voraus, dass Sie MySQL am Standardport ausführen.

Verbindungsfunktion erstellen

Nun drinnen /inc/class/DAL.php, Wir werden eine Funktion erstellen, mit der wir eine Verbindung zu unserer Datenbank herstellen.

Die Verbindung sowie alle anstehenden Abfragen werden in einer Klasse namens namens leben DAL. Durch die Einbindung aller Datenbankbeteiligungen in eine einzige Klasse können wir unsere Abfragen später bearbeiten, ohne auf Geschäfts - oder Präsentationsschicht - Skripts zugreifen zu müssen. Außerdem bietet es einen gewissen Grad an Schein-Namespacing.

Im Falle dieser Klasse fügen wir einen Konstruktor hinzu, obwohl er nichts tun muss.

 Verbindung zum MySQL-Server konnte nicht hergestellt werden "); mysql_select_db (DB_DB, $ conn) oder die ("
Konnte die angegebene Datenbank nicht auswählen "); $ conn zurückgeben;?>

Beachten Sie, dass der Umfang der dbconnect Methode ist privat. Dies liegt daran, dass wir uns nicht außerhalb unserer DAL mit der Datenbank verbinden müssen. Stattdessen verfügen wir über öffentliche Abfragemethoden, die dbconnect aus der DAL heraus aufrufen. Etwas verwirrend? Keine Sorge, lesen Sie weiter.


Schritt 4. Erstellen Sie generische Abfragetools

Um unsere Abfragen so zusammenzufassen, dass wir kurze Code-Teile wiederverwenden können, benötigen wir zwei Dinge. Zuerst benötigen wir eine Art "generische Abfrageergebnis" -Klasse. Zweitens benötigen wir eine generische Abfragemethode in unserer DAL.

Erstellen Sie eine generische Abfrageergebnisklasse

Der Zweck all dies ist, in der Lage zu sein, SQL-Abfragen in Objekte umzuwandeln und die Verwendung des Hässlichen zu minimieren while ($ row = mysql_fetch_array ($ result)) Schleife. Objekte lassen sich viel einfacher bearbeiten und ermöglichen die Verwendung von Eigenschaften anstelle von Array-Schlüsseln.

Kurz gesagt, wir möchten eine Klasse erstellen, die Eigenschaftsnamen im laufenden Betrieb erstellt und Daten speichert, die diesen Eigenschaften zugeordnet sind.

Wir werden diese Klasse in unsere aufnehmen /inc/class/DAL.php Skript. Da es sich um eine neue Klasse handelt, befindet sie sich außerhalb der DAL-Klasse.

 Klasse DALQueryResult private $ _results = array (); öffentliche Funktion __construct ()  öffentliche Funktion __set ($ var, $ val) $ this -> _ Ergebnisse [$ var] = $ val;  public function __get ($ var) if (isset ($ this -> _ Ergebnisse [$ var])) return $ this -> _ results [$ var];  else return null; 

Erstellen Sie eine generische Abfragemethode

Jetzt in unserem DAL Klasse, müssen wir eine generische Abfragemethode erstellen, die sich drehen wird WÄHLEN Abfragen in DALQueryResult Objekte.

Grundsätzlich möchten wir jeden zurückgegebenen Feldnamen in eine Eigenschaft von konvertieren DALQueryResult Objekt.

 private Funktionsabfrage ($ sql) $ this-> dbconnect (); $ res = mysql_query ($ sql); if ($ res) if (strpos ($ sql, 'SELECT') === false) return true;  else if (strpos ($ sql, 'SELECT') === false) return false;  else return null;  $ results = array (); while ($ row = mysql_fetch_array ($ res)) $ result = new DALQueryResult (); foreach ($ row as $ k => $ v) $ result -> $ k = $ v;  $ results [] = $ result;  $ Ergebnisse zurückgeben; 

Hier ist eine private Funktion, die eine SQL-Abfrage akzeptiert. Es stellt eine Verbindung zur Datenbank her und führt die Abfrage aus. Anschließend wird geprüft, ob Ergebnisse vorliegen. Wenn keine Ergebnisse vorhanden sind, wird bei a der Wert null zurückgegeben WÄHLEN Abfrage, false bei anderen Abfragen. Wenn die Abfrage erfolgreich war und keine Abfrage war WÄHLEN Abfrage, wird es wahr zurückgeben. Wenn es eine wäre WÄHLEN, Anschließend werden die Ergebnisse in ein Array von DALQueryResult-Objekten konvertiert. Dies ahmt die Ergebnisse nach, die man normalerweise von einer mysql_query erhalten würde.


Schritt 5. Schreiben Sie eine bestimmte Abfrage

Jetzt können wir tatsächlich eine SQL-Abfrage schreiben. DAL-Abfragen sollten sowohl hinsichtlich des Namens als auch des Zwecks sehr spezifisch sein. Lassen Sie uns ein Modell erstellen, das alle Modelle einer bestimmten Marke findet.

Dies wird unsere erste öffentliche Methode sein.

 public function get_models_by_make_name ($ name) $ sql = "SELECT models.id als id, models.name als name, makes.name als make FROM models INNER JOIN macht ON models.make = makes.id WHERE makes.name = '$ Name'"; $ this-> query ($ sql) zurückgeben; 

Hier schreiben wir nur die Abfrage und geben das Ergebnis in Form von DALQueryResult-Objekten zurück. Unser generisches Abfrage Die Methode kümmert sich um die Iterationen und die Entscheidungsfindung.

Fertig DAL

An diesem Punkt ist unser DAL.php Skript ist fertig. Es sollte wie folgt aussehen.

 _Ergebnisse [$ var] = $ val;  public function __get ($ var) if (isset ($ this -> _ Ergebnisse [$ var])) return $ this -> _ results [$ var];  else return null;  class DAL public function __construct ()  public function get_models_by_make_name ($ name) $ sql = "SELECT models.id als id, models.name als name, make.name als make aus Modellen. INNER JOIN macht ON-Modelle .make = makes.id WHERE makes.name = '$ name' "; $ this-> query ($ sql) zurückgeben;  private Funktion dbconnect () $ conn = mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) oder die ("
Verbindung zum MySQL-Server konnte nicht hergestellt werden "); mysql_select_db (DB_DB, $ conn) oder die ("
Konnte die angegebene Datenbank nicht auswählen "); $ conn; private Funktionsabfrage ($ sql) $ this-> dbconnect (); $ res = mysql_query ($ sql); if ($ res) if (strpos ($ sql, 'SELECT') === false) return true; else if (strpos ($ sql, 'SELECT') === false) return false; else return null; $ results = array (); while ($ row = mysql_fetch_array ($ res)) $ result = new DALQueryResult (); foreach ($ row as $ k => $ v) $ result -> $ k = $ v; $ result [] = $ result; gibt $ results zurück;?>

Schritt 6. Verwenden Sie die DAL

Nun geht es endlich zu unserem /index.php Skript und Anzeige unserer Ergebnisse mit der DAL. Alles was wir tun müssen, ist unser einzuschließen /conf/config.php Datei, instanziieren die DAL und machen etwas mit den Daten. Hier ist ein Beispiel.

 get_models_by_make_name ($ make); Echo "

Modelle von $ make

"; // Überprüfen Sie, ob Ergebnisse vorhanden sind, wenn ($ results) echo"
    "; // zyklische Ergebnisse für alle ($ Ergebnisse als $ model) Echo"
  • $ model-> $ model-> name erstellen (Datenbank-ID: $ model-> id)
  • "; Echo"
"; else // Eine Meldung wegen fehlendem Datenecho anzeigen"

Leider haben wir keine Informationen zu diesem Hersteller.

";?>

Wie Sie sehen, haben wir jetzt Ergebnisse, mit denen wir die Feldnamen als Eigenschaften eines PHP-Objekts bezeichnen können.


Schritt 7. Die Dinge noch einen Schritt weiter gehen

Oft ist es sinnvoll, das Generic zu konvertieren DALQueryResult in ein spezifischeres Objekt. In diesem Fall können Sie Geschäftsobjekte schreiben, die ein akzeptieren DALQueryResult als Konstruktorparameter. Dann verwenden Sie das einfach, um das neue Objekt zu erstellen.

Hier ist ein Beispiel

 _id = $ result-> id; $ this -> _ make = $ result-> make; $ this -> _ name = $ result-> name;  public function __get ($ var) switch ($ var) case 'id': return $ this -> _ id; brechen; case 'make': return $ this -> _ make; brechen; case 'name': return $ this -> _ name; brechen; default: return null; brechen;  public function __toString () return $ this -> _ name; ?>

Dann schreiben Sie einfach eine Abfrage, um ein Array dieser Objekte anstelle eines generischen Arrays zurückzugeben DALQueryResult Objekte.

Denken Sie daran, Ihre Fragen immer sehr spezifisch zu benennen.

 public function get_models_by_make_name_as_CarModel ($ name) // Vorhandene Abfrage wiederverwenden $ results = $ this-> get_models_by_make_name ($ sql); // auf Ergebnisse prüfen if (! $ results) return $ results;  else // Array für CarModel-Objekte $ object_results = array (); // durchlaufen und in CarModel-Objekte foreach konvertieren ($ results as $ result) object_results [] = new CarModel ($ result);  // Rückgabe-Array von CarModel-Objekten return object_results; 

Das Erstellen bestimmter Objekte kann sehr nützlich sein, wenn Berechnungen zum Extrahieren aussagekräftiger Daten aus Feldern erforderlich sind.


Ich hoffe, Ihnen hat das Tutorial gefallen! Viel Glück.