Es gibt jedoch einen Punkt, an dem wir oft nicht innehalten, um nachzudenken, und es ist der Punkt, an dem das Werkzeug, das uns die Sprache gibt, das Beste für unsere Arbeit ist. Dies passiert in PHP häufig, obwohl wir bereits seit vielen Jahren die Warnung haben, die mysql_connect () -Funktion nicht zu verwenden, um die Verknüpfungen zu den Datenbanken herzustellen. Viele Entwickler scheinen den großen Fehler, den sie daraus machen, nicht zu erkennen.
Der hintergrund
PHP bietet native Unterstützung für eine große Anzahl von Datenbank- Engines, die auf dem Markt erhältlich sind. Die Integration in MySQL ist jedoch für die meisten Benutzer fast ein obligatorischer Ausgangspunkt.
Die Alternative zum Herstellen der Verbindung besteht aus zwei Elementen. Das erste besteht darin, dieselbe Struktur der Sprache zum Herstellen von Verbindungen zu verwenden oder die neue Bibliothek für die Verbindung mit MySQL zu verwenden . Hier kann die erste Frage kommen, warum nur an MySQL denken? Nun, die Antwort ist einfach, es ist ein Anfang, es ist die einfachste und nützlichste Sache, die wir anfangs erklären können. Wenn wir diese Basis kennen, können wir sie auf andere Motoren und Fahrer hochrechnen.
PHP-Datenobjekt
Die erste Alternative für die Verbindung mit der Datenbank ist die Verwendung des Datenobjekts der Sprache PHP Data Object oder dessen Abkürzung PDO . Dies ist nur eine umfangreiche Erweiterung in der Sprache C , die es uns ermöglicht, Verbindungen mit verschiedenen Arten von Datenbank- Engines herzustellen, und verfügt über Standardmethoden, mit denen wir plattformübergreifende Anwendungen schreiben können, dh wir müssen keine Änderungen vornehmen die Syntax, wenn wir das Datenbankmodul ändern.
Zuerst sagten wir, wir würden uns auf MySQL konzentrieren, aber wenn wir eine Verbindung über PDO herstellen, können wir das, was wir tun, auf andere Engines anwenden. Dazu müssen wir nur die Treiber für diese Engines aktivieren oder hinzufügen und sie in der Datei php.ini des Servers aktivieren .
Stellen Sie eine Verbindung von PDO her
Um eine Verbindung zu einer Datenbank herzustellen, müssen wir nur die Verbindung mit der entsprechenden Methode herstellen. In PDO wird die Verbindung mit drei grundlegenden Parametern hergestellt, dem Namen des Datenbankservers, dem Benutzernamen und seinem Kennwort.
Der einzige Parameter dieser drei Parameter, der einer Erklärung bedarf, ist der des Datenbankservers. In der Vergangenheit mussten wir die Datenbank nach dem Herstellen der Verbindung über eine bestimmte Funktion auswählen. In diesem Fall müssen wir dies in derselben Zeichenfolge tun. Die Zeichenfolge für den Servernamen sieht also folgendermaßen aus:
mysql: host = hostname; dbname = DBname
Wir sehen, dass wir zuerst die Engine spezifizieren, in diesem Fall mysql und dann mit host, was der Server ist. Hier kann es eine IP oder localhost sein, wenn der Server lokal ist. Schließlich übergeben wir mit dbname den Namen der Datenbank, an die wir wollen verbinden. In der folgenden Abbildung sehen wir, wie ein Code für die Verbindung mit PDO aussieht :
Führen Sie Abfragen aus
Da wir den ersten Schritt der Verbindungsherstellung kennen, müssen wir jetzt lernen, wie wir Abfragen ausführen können. Normalerweise haben wir in der Vergangenheit die Abfrage direkt mit ihren Parametern ausgeführt. Diese Vorgehensweise ist jedoch keineswegs sicher, da sie uns anfällig für SQL-Injection- Angriffe macht. Mit PDO können wir die sogenannten Prepared Stations verwenden, die nichts anderes sind, als die Abfrage auf parametrisierte Weise auszuführen, sodass die Bibliothek selbst einen Debug-Job ausführt und weniger anfällig für Angriffe ist. Nachfolgend sehen wir, wie eine einfache Abfrage ausgeführt wird und wie sie dann mit Prepared Stament vergleichbar ist .
In dieser einfachen Abfrage nehmen wir an, dass wir in unserer Datenbank eine Tabelle namens author haben , die einen Autorencode erhält, und dann den Namen der Tabelle. Da es sich um eine Demonstration handelt, handelt es sich nicht um ein Beispiel für eine gute Tabelle, sondern nur um die Funktionsweise. Verbindung von PDO .
In der Abbildung sehen wir, dass wir eine Methode namens query () aus dem Objekt aufrufen, das mit der PDO-Verbindungszeichenfolge erstellt wurde. Dann schreiben wir unsere Abfrage ohne größere Probleme:
Das Problem ist, dass wir die Werte direkt erhalten, so dass es keine Möglichkeit gibt, diese zu verbessern und wiederzuverwenden. Wenn wir jedoch ein Prepared Stament durchführen , werden wir feststellen , dass wir zuerst angeben, welche Abfrage ausgeführt werden soll, und diese dann mit einer anderen Methode wirksam machen und Wir haben die notwendigen Werte übergeben. Dadurch kommt die PDO- Parameter-Debugging-Engine ins Spiel und bietet zusätzlichen Schutz. Sehen wir uns in der folgenden Abbildung an, wie wir das vorherige Beispiel jetzt mit vorbereiteten Stationen verwenden würden .
Auf den ersten Blick mag es komplex und nicht optimal erscheinen. Wenn wir jedoch analysieren, sehen wir, dass wir zuerst die auszuführende Abfrage erstellen und dann ein Array mit den Parametern erstellen, die unsere Abfrage erhalten wird. Im Fall des Beispiels erhalten wir den Autorencode und dessen Code name, schließlich führen wir die Abfrage aus und übergeben das Array von Parametern.
Erhalten Sie die Ergebnisse einer Abfrage
Wenn wir nach dem Einfügen einiger Werte in unsere Datenbank konsultieren möchten, ist dies sehr einfach. Wir müssen es nur mit einer SELECT- Abfrage tun. Dadurch können wir die Datensätze einlesen. In der Vergangenheit haben wir Funktionen wie mysql_fetch_array () oder mysql_fetch_assoc () verwendet. Einmal verzehrt, konnten wir ihre Ergebnisse nicht mehr verarbeiten.
Mit PDO erhalten wir die Daten direkt vom Objekt, sodass wir sie während der Ausführung immer zur Verfügung haben. Sehen wir uns das folgende Beispiel an:
Wir sehen, wie wir anfänglich ein Prepared Stament machen , wir führen in diesem Fall eine einfache Abfrage durch und dann werden wir mit einem while () -Zyklus jeden der Datensätze abrufen und ihren Eindruck hinterlassen, wenn wir bemerken, dass wir nirgendwo in unserem Code auf MySQL verweisen. Wenn wir also die Verbindungskette ändern und eine andere Engine mit einer Tabelle und einer Datenbank mit demselben Namen und derselben Struktur verwenden, können wir Ihre Daten abrufen, ohne unseren Code zu ändern.
MySQLi, die Alternative
Da MySQL die beliebteste Datenbank- Engine für die Integration mit PHP ist , gibt es auch eine Alternative. MySQLi ist nichts anderes als eine objektorientierte Schnittstelle. Die Funktionsweise ist der von PDO sehr ähnlich, es ändert sich jedoch, dass es sich nur um diese beliebte Datenbank-Engine handelt, sodass eine plattformübergreifende Konvertierung nicht möglich wäre.
Die Verbindungszeichenfolge ist etwas weniger komplex, da der Name des Servers im Host und die zu verwendende Datenbank in zwei verschiedene Parameter unterteilt werden. Sehen wir uns an, wie der Name und das Kennwort des Benutzers aussehen:
$ objConex = neues mysqli (Hostname, Benutzer, Passwort, DatabaseName);
Im folgenden Beispiel sehen wir, wie wir eine Verbindung mit MySQLi herstellen und wie wir eine einfache Dateneinfügung durchführen können:
Wir stellen fest, dass es eine Ähnlichkeit mit PDO gibt, wenn Sie eine query () -Methode haben, dies funktioniert jedoch nur für MySQL .
Daten von einer Abfrage erhalten
Nun werden wir die Daten empfangen und durchlaufen, die wir aus einer Abfrage erhalten können. Dazu werden wir dieselbe query () -Methode und dann die fetch_assoc () -Methode verwenden, um die Ergebnisse zu erhalten:
Am interessantesten ist, dass wir die Methode close () verwenden, mit der die aktuelle Verbindung geschlossen und der Puffer gesäubert wird, um die Verwendung der Serverressourcen zu optimieren.
Damit haben wir dieses Tutorial abgeschlossen. Wir haben festgestellt, dass die neuen Alternativen viel sauberer und sicherer sind und sich neben ihrer einfachen Bedienung für die aktuelle Zeit eignen.