Heim > Backend-Entwicklung > PHP-Tutorial > Anzeigen von Daten von MySQL im Web: Eine Einführung

Anzeigen von Daten von MySQL im Web: Eine Einführung

Jennifer Aniston
Freigeben: 2025-02-08 09:45:09
Original
511 Leute haben es durchsucht

Anzeigen von Daten von MySQL im Web: Eine Einführung

Der folgende Artikel ist ein Auszug aus Php & MySQL: Novice nach Ninja, 7. Ausgabe , eine praktische Anleitung zum Erlernen aller Tools, Prinzipien und Techniken, die zum Erstellen einer professionellen Webanwendung erforderlich sind. In diesem letzten Tutorial in der Serie erfahren Sie, wie Sie Informationen in einer MySQL -Datenbank aufnehmen und auf einer Webseite anzeigen, damit alle sehen können.


  • Einrichten Ihrer PHP -Entwicklungsumgebung mit Docker
  • Ein Anfängerleitfaden zu PHP
  • Einführung von MySQL: Ein Anfängerhandbuch
  • Daten von MySQL im Web anzeigen: Eine Einführung

Das ist es - das Zeug, für das Sie sich angemeldet haben! In diesem Kapitel erfahren Sie, wie Sie Informationen in einer MySQL -Datenbank aufnehmen und auf einer Webseite anzeigen, damit alle sehen können.

Bisher haben Sie Ihren ersten PHP-Code geschrieben und die Grundlagen von MySQL, einer relationalen Datenbank-Engine und PHP, einer serverseitigen Skriptsprache gelernt.

Jetzt können Sie lernen, wie Sie diese Tools gemeinsam verwenden, um eine Website zu erstellen, auf der Benutzer Daten aus der Datenbank anzeigen und sogar ihre eigenen hinzufügen können.

Hinweis: Wie in Kapitel 3 verwende ich hier "MySQL", um auf das Datenbankprotokoll zu verweisen. Ihre PHP -Skripte werden dasselbe tun. In diesem Kapitel gibt es zahlreiche Referenzen - und im PHP -Code, den Sie schreiben - auf "MySQL", obwohl wir uns tatsächlich mit einer MariADB -Datenbank verbinden.

Anzeigen von Daten von MySQL im Web: Eine Einführung

Das große Bild

Bevor wir nach vorne springen, lohnt es sich, einen Schritt zurück zu machen, um ein klares Bild unseres ultimativen Ziels zu erzielen. Wir haben zwei leistungsstarke Tools zur Verfügung: die Php -Skriptsprache und die MySQL -Datenbank -Engine. Es ist wichtig zu verstehen, wie diese zusammenpassen.

Der Zweck der Verwendung von MySQL für unsere Website besteht darin, dass der Inhalt dynamisch aus der Datenbank gezogen wird, um Webseiten für das Anzeigen in einem regulären Browser zu erstellen. An einem Ende des Systems haben Sie also einen Besucher auf Ihrer Website über einen Webbrowser, um eine Seite anzufordern. Dieser Browser erwartet, dass er ein Standard -HTML -Dokument im Gegenzug erhält. Am anderen Ende haben Sie den Inhalt Ihrer Website, der sich in einer oder mehreren Tabellen in einer MySQL -Datenbank befindet, in der nur versteht, wie man auf SQL -Abfragen (Befehle) reagiert.

Anzeigen von Daten von MySQL im Web: Eine Einführung

Wie im obigen Bild gezeigt, ist die PHP-Skriptsprache die Aufgabe, die beide Sprachen spricht. Es verarbeitet die Seitenanforderung und holt die Daten aus der MySQL -Datenbank mithilfe von SQL -Abfragen genau wie diejenigen ab, mit denen Sie in Kapitel 3 eine Witze Tabelle erstellt haben. Sie spuckt sie dann dynamisch als die schön formatierte HTML -Seite aus, die der Browser erwartet.

Nur damit es klar und frisch in Ihrem Kopf ist. Dies passiert, wenn es einen Besucher einer Seite auf Ihrer Website gibt:

  1. Der Webbrowser des Besuchers fordert die Webseite von Ihrem Webserver an.
  2. Die Webserver -Software (normalerweise apache oder nginx) erkennt an, dass die angeforderte Datei ein PHP -Skript ist. Daher stellt der Server den PHP -Interpreter ab, um den in der Datei enthaltenen Code auszuführen.
  3. bestimmte PHP -Befehle (die im Mittelpunkt dieses Kapitels stehen) verbinden sich mit der MySQL -Datenbank und fordern Sie den Inhalt an, der auf der Webseite gehört.
  4. Die MySQL -Datenbank antwortet, indem er den angeforderten Inhalt an das PHP -Skript sendet.
  5. Das PHP -Skript speichert den Inhalt in einer oder mehreren PHP -Variablen und verwendet dann Echo -Anweisungen, um den Inhalt als Teil der Webseite auszugeben.
  6. Der PHP -Interpreter endet mit einer Kopie des HTML, die er dem Webserver erstellt hat.
  7. Der Webserver sendet das HTML an den Webbrowser, da es eine einfache HTML -Datei wäre, außer dass die Seite, anstatt direkt aus einer HTML -Datei zu kommen, die vom PHP -Interpreter bereitgestellte Ausgabe ist. Der Browser kann dies jedoch nicht wissen. Was den Browser betrifft, fordert und empfängt er eine Webseite wie jede andere.

Erstellen eines MySQL -Benutzerkontos

Damit PHP eine Verbindung zu Ihrem MySQL -Datenbankserver herstellen kann, muss ein Benutzername und ein Kennwort verwendet werden. Bisher enthält alles, was Ihre Witzdatenbank enthält, eine Reihe von markigen -Bon -Mots , aber es kann zu kurzer Zeit sensible Informationen wie E -Mail -Adressen und andere private Details zu den Benutzern Ihrer Website enthalten. Aus diesem Grund ist MySQL so konzipiert, dass es sehr sicher ist und Ihnen eine enge Kontrolle darüber gibt, welche Verbindungen es akzeptieren und welche Verbindungen dies tun dürfen.

Die Docker -Umgebung enthält bereits einen MySQL -Benutzer in Kapitel 3, mit dem Sie sich bereits beim MySQL -Server angemeldet haben.

Sie könnten mit demselben Benutzernamen (v.je) und Passwort (v.je) eine Verbindung zur Datenbank aus Ihrem PHP -Skript herstellen, aber es ist nützlich, ein neues Konto zu erstellen - denn wenn Sie eine haben Webserver, Sie möchten es möglicherweise an mehr als eine Website hosten. Indem Sie jeder Website ein eigenes Benutzerkonto geben, haben Sie mehr Kontrolle darüber, wer Zugriff auf die Daten für eine bestimmte Website hat. Wenn Sie mit anderen Entwicklern zusammenarbeiten, können Sie ihnen Zugriff auf die Websites gewähren, an denen sie arbeiten, aber nicht mehr.

Sie sollten ein neues Benutzerkonto mit nur den spezifischen Berechtigungen erstellen, die es benötigt, um in der IJDB -Datenbank zu arbeiten, von der Ihre Website abhängt. Lass uns das jetzt tun.

Um einen Benutzer zu erstellen, MySQL Workbench zu öffnen und eine Verbindung zu Ihrem Server herzustellen. Führen Sie dann die folgenden Fragen aus:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die erste Abfrage ist ziemlich selbsterklärend: Sie erstellt einen Benutzer namens IJDBUSER mit dem Passwort myPassword. Das % Zeichen nach dem Benutzernamen zeigt an, dass die Datenbank von jedem Ort aus angeschlossen werden kann. Die zweite Abfrage gibt dem Benutzer dem IJDB -Schema vollständige Einsätze. Dadurch kann dieser Benutzer alle Tabellen, Spalten und Daten im IJDB -Schema sehen und ändern, hat jedoch keinen Zugriff auf irgendetwas außerhalb.

Jetzt, da der Benutzer ijdbuser erstellt wurde, können wir sie verwenden, um eine Verbindung zur Datenbank herzustellen. Es ist möglich, eine Verbindung in MySQL Workbench mit diesem Benutzer aufzubauen. Da die Berechtigungen begrenzt sind, ist es besser, MySQL Workbench mit dem V.JE -Konto zu halten. Stattdessen werden wir den neuen Benutzer verwenden, wenn wir eine Verbindung aus einem PHP -Skript herstellen.

Verbindung zu MySQL mit PHP

herstellen

Bevor Sie Inhalte aus Ihrer MySQL -Datenbank für die Aufnahme in eine Webseite abrufen können, müssen Sie wissen, wie Sie eine Verbindung zu MySQL in einem PHP -Skript herstellen. Bisher haben Sie eine Anwendung namens MySQL Workbench verwendet, um eine Verbindung zu Ihrer Datenbank herzustellen. So wie MySQL Workbench direkt zu einem laufenden MySQL -Server eine Verbindung herstellen kann, kann auch Ihre eigenen PHP -Skripte.

Obwohl dieses Kapitel vollständig über die Verbindung zu MySQL von PHP gesprochen wird, stellen wir uns tatsächlich mit der MariADB -Datenbank her, die im vorherigen Kapitel diskutiert wurde. PHP kann keinen Unterschied zwischen MySQL und Mariadb sehen, da sie austauschbar sind. Ich werde die Datenbank als MySQL durchgehend bezeichnen, da alle verwendeten Befehle verwendet werden können, um eine Verbindung zu einem MySQL- oder MariADB -Datenbankserver herzustellen.

Die ursprüngliche MySQL -Datenbank lieferte eine standardisierte Methode für Clients wie MySQL Workbench und PHP, um mit dem Server zu kommunizieren. Mariadb kopierte diesen Standard, und alle Befehle in PHP verwenden den Namen mysql , um die Dinge einfach zu halten, werde ich den Begriff mysql in diesem Kapitel verwenden, um auf die Datenbank zu verweisen.

Es gibt drei Methoden zur Verbindung zu einem MySQL -Server von PHP:

  • Die MySQL -Bibliothek
  • Die MySQLi -Bibliothek
  • Die PDO -Bibliothek

Diese alle machen im Wesentlichen den gleichen Job - eine Verbindung zur Datenbank und das Senden von Abfragen - aber sie verwenden unterschiedliche Code, um sie zu erreichen.

Die MySQL -Bibliothek ist die älteste Methode zur Verbindung zur Datenbank und wurde in PHP 2.0 eingeführt. Die Merkmale, die es enthält, sind minimal und wurden ab Php 5.0 (veröffentlicht im Jahr 2004) von MySQLI abgelöst.

Um die Datenbank mit der alten MySQL -Bibliothek zu verbinden und abzufragen, werden Funktionen wie MySQL_Connect () und MySQL_Query () verwendet. Diese Funktionen wurden veraltet - was bedeutet, dass sie vermieden werden sollten - seit Php 5.5 und seit Php 7.0 vollständig aus PHP entfernt wurden.

Obwohl die meisten Entwickler den Grund für die Änderung sahen, sobald PHP 5.0 veröffentlicht wurde, gibt es immer noch Hunderte von Artikeln und Code-Beispielen im Web, die diese jetzt nicht existierende MySQL_* -Funktionen verwenden-obwohl MySQLI effektiv war die bevorzugte Bibliothek seit fünfzehn Jahren.

Wenn Sie auf ein Code -Beispiel stoßen, das die Zeile mysql_connect () enthält, überprüfen Sie das Datum des Artikels. Es ist wahrscheinlich aus den frühen 2000er Jahren, und im Programmieren sollten Sie niemals etwas so Altem vertrauen. Die Dinge ändern sich ständig - weshalb dieses Buch in seiner siebten Ausgabe ist!

In PHP 5.0 wurde die MySQLI -Bibliothek - standardmäßig für „MySQL Agresved“ - freigegeben, um einige der Einschränkungen in der ursprünglichen MySQL -Bibliothek anzugehen. Sie können die Verwendung von MySQLI leicht identifizieren, da der Code Funktionen wie MySQLi_Connect () und MySQLi_Query () verwendet.

Kurz nach der Veröffentlichung der MySQLI-Bibliothek in PHP 5.0, PHP 5.1, wurde mit einer erheblichen Anzahl von Änderungen veröffentlicht, die die Art und Weise, wie wir heute PHP schreiben viele später in diesem Buch). Eine der Hauptänderungen in PHP 5.1 war, dass eine dritte Bibliothek, PDO (PHP -Datenobjekte), zur Verbindung zu MySQL -Datenbanken eingeführt wurde.

Es gibt verschiedene Unterschiede zwischen PDO und MySQLI, aber die wichtigste ist, dass Sie die PDO -Bibliothek verwenden können, um eine Verbindung zu nahezu jedem Datenbankserver herzustellen - z. B. einen Oracle -Server oder Microsoft SQL -Server. Für Entwickler besteht der größte Vorteil dieses generischen Ansatzes darin, dass es sehr einfach ist, mit der Bibliothek zu interagieren, wenn Sie gelernt haben, wie Sie mit der Bibliothek mit einer MySQL -Datenbank interagieren, mit einem anderen Datenbankserver zu interagieren.

wohl ist es einfacher, Code für PDO zu schreiben, und es gibt einige Nuancen, die den PDO -Code lesbarer machen können - benannte Parameter in vorbereiteten Aussagen, die der Hauptvorteil sind. (Keine Sorge, ich werde später erklären, was das später bedeutet.)

Aus diesen Gründen verwenden die neuesten PHP -Projekte die PDO -Bibliothek, und es ist die Bibliothek, die ich Ihnen zeigen werde, wie Sie in diesem Buch verwendet werden. Weitere Informationen zu den Unterschieden finden Sie im SitePoint-Artikel „PDO erneut steigern-den richtigen Weg, um auf Datenbanken in PHP zuzugreifen“.

Nach dieser kleinen Geschichtsstunde sind Sie wahrscheinlich bestrebt, wieder Code zu schreiben. So verwenden Sie PDO, um eine Verbindung zu einem MySQL -Server herzustellen:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Stellen Sie sich vorerst neue PDO als eine integrierte Funktion vor, genau wie die Rand-Funktion, die wir in Kapitel 2 verwendet haben. Wenn Sie denken: „Hey, Funktionen können nicht Räume in ihrer Namen! ", Du bist schlauer als der durchschnittliche Bär und ich werde genau erklären, was hier gleich los ist. In jedem Fall sind drei Argumente erforderlich:

  • Eine Zeichenfolge, in der die Datenbanktyp (MySQL :), den Hostnamen des Servers (Host = HostName;) und den Namen der Datenbank (dbname = Datenbank)
  • angegeben wird.
  • Der MySQL -Benutzername, den Sie PHP verwenden möchten, verwenden
  • Das MySQL -Passwort für diesen Benutzernamen

Sie können sich aus Kapitel 2 erinnern, dass PHP -Funktionen normalerweise einen Wert zurückgeben, wenn sie aufgerufen werden. Diese neue PDO -Funktion gibt einen Wert zurück, der als PDO -Objekt bezeichnet wird, das die hergestellte Verbindung identifiziert. Da wir beabsichtigen, die Verbindung zu verwenden, sollten wir diesen Wert festhalten, indem wir ihn in einer Variablen speichern. So sieht das aus, wobei die erforderlichen Werte ausgefüllt werden, um eine Verbindung zu Ihrer Datenbank herzustellen:
CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Sie können wahrscheinlich sehen, was mit den letzten beiden Argumenten los ist: Sie sind der Benutzername und das Passwort, das Sie früher in diesem Kapitel erstellt haben.

Das erste Argument ist etwas komplizierter. Der Teil dbname = ijdb fordert PDO an, die Datenbank (auch als iJDB als Schema

zu verwenden. Jede Abfrage, die von PHP ausgeführt wird, standardmäßig in Tabellen in diesem Schema. Wählen Sie * Aus dem Witz werden Datensätze aus der Witztabelle im IJDB -Schema ausgewählt.

Auch wenn Sie bereits mit PHP, PDO und MySQL vertraut sind, sieht der Host = Mysql -Teil verwirrend aus. Normalerweise wäre dies Host = localhost (in Bezug auf den lokalen Computer, der gleiche Computer, der PHP ausführt) oder auf einen bestimmten Domänennamen hinweist, in dem die Datenbank gehostet wird, wie z. B. Host = sitePoint.com.

Warum ist es Host = Mysql und worauf bezieht sich MySQL hier? In Docker erhält jeder Service

einen Namen. Wenn Sie die Datei docker-compose.yml untersuchen, die den Server konfiguriert, heißt der Datenbankdienst MySQL und in Docker kann ein Dienst mit dem Namen des anderen Dienstes eine Verbindung zu einem anderen herstellen.

.

Abgesehen von

Argumenten ist es wichtig zu sehen, dass der von neue PDO zurückgegebene Wert in einer Variablen namens $ pdo gespeichert ist.

Der MySQL -Server ist eine völlig separate Software vom Webserver. Daher müssen wir die Möglichkeit berücksichtigen, dass der Server aufgrund eines Netzwerkausfalls nicht verfügbar oder unzugänglich ist oder weil die von Ihnen angegebene Benutzername/Kennwort -Kombination vom Server abgelehnt wird oder weil Sie nur vergessen haben, Ihren MySQL -Server zu starten! In solchen Fällen wird neuer PDO nicht laufen und eine PHP -Ausnahme auswerfen.

Hinweis: Zumindest standardmäßig kann PHP so konfiguriert werden, dass keine Ausnahme ausgelöst wird und es einfach keine Verbindung herstellt. Dies ist im Allgemeinen nicht wünschenswertes Verhalten, da es viel schwieriger ist, herauszufinden, was schief gelaufen ist.

Wenn Sie sich fragen, was es bedeutet, "eine PHP -Ausnahme zu werfen", machen Sie sich selbst! Sie sind dabei, einige weitere Funktionen der PHP -Sprache zu entdecken.

Eine PHP -Ausnahme ist das, was passiert, wenn Sie PHP sagen, eine Aufgabe auszuführen, und sie kann dies nicht tun. PHP wird versuchen, das zu tun, was es gesagt hat, wird aber scheitern. Und um Ihnen von dem Fehler zu erzählen, wird Sie eine Ausnahme auf Sie auswerfen. Eine Ausnahme ist kaum mehr als PHP, der nur mit einer bestimmten Fehlermeldung abstürzt. Wenn eine Ausnahme ausgelöst wird, stoppt PHP. Es werden keine Codezeilen nach dem Fehler ausgeführt.

Als verantwortungsbewusster Entwickler ist es Ihre Aufgabe, diese Ausnahme zu fangen und etwas dagegen zu tun, damit das Programm fortgesetzt werden kann.

Hinweis: Wenn Sie keine Ausnahme abrufen, stellt PHP Ihr PHP -Skript nicht mehr aus und zeigt eine spektakulär hässliche Fehlermeldung an. Diese Fehlermeldung enthält sogar den Code Ihres Skripts, der den Fehler geworfen hat. In diesem Fall enthält dieser Code Ihren MySQL -Benutzernamen und Ihr Kennwort. Daher ist es besonders wichtig, dass die Fehlermeldung von Benutzern gesehen wird!

Um eine Ausnahme zu erheben, sollten Sie den Code umgeben, der eine Ausnahme mit einem Versuch ausgeben könnte… Catch -Anweisung:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Sie können sich einen Versuch vorstellen ... Catch -Anweisung wie eine IF… sonst, außer dass der zweite Codeblock passiert, wenn der erste Codeblock nicht ausgeführt wird.

noch verwirrt? Ich wissen

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Wie Sie sehen, ist dieser Code ein Versuch… Catch -Anweisung. Im Oben versuchen wir, mit neuem PDO eine Verbindung zur Datenbank herzustellen. Wenn dies erfolgreich ist, speichern wir das resultierende PDO -Objekt in $ PDO, damit wir mit unserer neuen Datenbankverbindung arbeiten können. Wenn die Verbindung erfolgreich ist, wird die Variable $ output auf eine Nachricht gesetzt, die später angezeigt wird.

Wichtig ist, dass innerhalb eines Versuchs… Catch -Anweisung nach einer Ausnahme nicht ausgeführt wurde. In diesem Fall wird die $ Ausgangsvariable niemals auf "Datenbankverbindung festgelegt" festgelegt, wenn die Verbindung zu der Datenbank eine Ausnahme ausgelöst hat (möglicherweise ist das Kennwort falsch, oder der Server nicht antwortet).

.

Wenn unser Datenbankverbindungsversuch fehlschlägt, wirft PHP eine PDOException aus, die die Art von Ausnahme ist, die neue PDO auswirken. Unser Catch -Block besagt daher, dass er eine PDOException aufnehmen wird (und ihn in einer Variablen namens $ e speichern wird). In diesem Block setzen wir die Variable $ Ausgabe so, dass eine Nachricht darüber enthält, was schief gelaufen ist.

Diese Fehlermeldung ist jedoch nicht besonders nützlich. Alles, was uns sagt, ist, dass PDO keine Verbindung zum Datenbankserver herstellen konnte. Es wäre besser, einige Informationen darüber zu haben, warum das war - zum Beispiel, weil der Benutzername und das Passwort ungültig waren.

Die Variable $ e enthält Details zur Ausnahme, die aufgetreten ist, einschließlich einer Fehlermeldung, die das Problem beschreibt. Wir können dies der Ausgangsvariablen unter Verwendung von Verkettung hinzufügen:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hinweis: Die $ E -Variable ist keine Zeichenfolge, sondern ein Objekt. Wir werden zu dem kommen, was das in Kürze bedeutet. Im Moment müssen Sie jedoch nur noch wissen, dass der Code $ e-> getMessage () die Fehlermeldung basierend auf der spezifischen Ausnahme erhält.

Wie eine if… sonst Aussage, einer der beiden Zweige eines Versuchs… wird garantiert ausgeführt. Entweder wird der Code im Try -Block erfolgreich ausgeführt, und der Code im Catch -Block wird ausgeführt. Unabhängig davon, ob die Datenbankverbindung erfolgreich war, gibt es eine Nachricht in der Variablen $ Ausgabe - entweder die Fehlermeldung oder die Nachricht, dass die Verbindung erfolgreich war.

Schließlich ist die Vorlagenausgabe, unabhängig davon, ob der Try -Block erfolgreich war, oder der Fangblock, der Vorlagenausgang.html.php. Dies ist eine generische Vorlage, die nur einen Text auf der Seite anzeigt:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Der vollständige Code kann in Beispiel gefunden werden: Mysql-connect.

Wenn die Vorlage enthalten ist, wird entweder die Fehlermeldung oder die Meldung „Datenbankverbindung festgelegt“ angezeigt.

Ich hoffe, der oben genannte Code macht jetzt einen Sinn. Fühlen Sie sich frei, zum Beginn dieses Abschnitts zurückzukehren und alles erneut zu lesen, wenn Sie verloren sind, da es dort einige schwierige Konzepte gab. Sobald Sie den Code jedoch fest im Griff haben, werden Sie wahrscheinlich erkennen, dass ich immer noch ein Mysterium ungeklärt gelassen habe: PDOs. Was genau ist neuer PDO und als ich sagte, gibt es ein „PDO -Objekt“ zurück, was genau ist ein Objekt?

Hinweis: Alle heruntergeladenen Beispielcode enthält ein Schema namens IJDB_Sample und ein Benutzer namens IJDB_Sample, damit Sie es ausführen können, unabhängig davon, was Sie Ihr Schema und Benutzer genannt haben. Eine Datei mit der Datenbank wird als Datenbank.SQL bereitgestellt, die Sie importieren können.

Wenn Sie den bereitgestellten webbasierten Beispielcode-Viewer verwenden, wird die Datenbank idbj_sampase erstellt, wenn Sie ein Beispiel geladen haben. Bei einem anderen Beispiel werden jedoch alle Änderungen an diesem Schema verloren gegangen. (Sie können die Dinge durcheinander bringen und zu einem anderen Beispiel und zurück wechseln, wird es zurückgesetzt, aber wenn Sie alle von Ihnen vorgenommenen Änderungen beibehalten möchten, machen Sie sie in dem von Ihnen erstellten Schema.)

Wenn Sie die Beispieldaten mithilfe von MySQL Workbench in Ihr Schema laden möchten, importieren Sie die Datenbank.SQL aus dem Projektverzeichnis, indem Sie Datenimport/Wiederherstellung auswählen. Wählen Sie dann aus der in sich geschlossenen Datei importieren, durchsuchen Sie die Datenbank.SQL und wählen Sie Ihren Schema-Namen im Standard-Zielschema aus. Wenn Sie Tabellen mit demselben Namen erstellt haben, werden diese überschrieben und alle Datensätze verloren.

Ein Crashkurs in objektorientierter Programmierung

Sie haben möglicherweise bemerkt, dass das Wort „Objekt“ im vorherigen Abschnitt in mein Wortschatz eingeschlichen wird. PDO ist die PHP -Daten Objekte , und neuer PDO gibt ein PDO -Objekt zurück. In diesem Abschnitt möchte ich erklären, worum es bei Objekten geht.

Vielleicht sind Sie auf den Begriff objektorientierte Programmierung (OOP) in Ihren eigenen Erkundungen von PHP oder der Programmierung im Allgemeinen gestoßen. OOP ist ein fortschrittlicher Programmstil, der besonders für den Aufbau von wirklich komplexen Programmen mit vielen Teilen geeignet ist. Die meisten Programmiersprachen im aktiven Gebrauch heute unterstützen OOP. Einige von ihnen erfordern sogar Sie, um in einem OOP -Stil zu arbeiten. PHP ist etwas lockerer und überlässt es dem Entwickler, zu entscheiden, ob sie ihre Skripte im OOP -Stil schreiben oder nicht.

Bisher haben wir unseren PHP -Code in einem einfacheren Stil mit dem Namen Procedural Programing geschrieben, und wir werden dies vorerst weiterhin tun, mit einem detaillierteren Blick auf Objekte später. Der prozessuale Stil ist gut für die relativ einfachen Projekte geeignet, die wir momentan angehen. Fast alle komplexen Projekte, die Sie mit OOP verwenden, werde ich später in diesem Buch detaillierter behandelt.

, dass die PDO-Erweiterung, mit der wir eine MySQL-Datenbank herstellen und mit einer MySQL-Datenbank arbeiten werden, im objektorientierten Programmierstil entwickelt wurde. Dies bedeutet, dass wir zunächst ein PDO -Objekt erstellen müssen, das unsere Datenbankverbindung darstellt, und dann die Funktionen von verwenden dieses Objekt, mit der Datenbank zu arbeiten.

Erstellen eines Objekts ähnelt dem Aufruf einer Funktion. Tatsächlich haben Sie bereits gesehen, wie es geht:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Das neue Schlüsselwort sagt PHP, dass Sie ein neues Objekt erstellen möchten. Anschließend hinterlassen Sie einen Speicherplatz und geben einen Klassennamen an, der PHP mitteilt, welche Art von Objekt Sie erstellen möchten. Eine Klasse ist eine Reihe von Anweisungen, die PHP befolgen wird, um ein Objekt zu erstellen. Sie können sich eine Klasse als ein Rezept vorstellen, z. B. für einen Kuchen und ein Objekt, das der eigentliche Kuchen ist, der aus der Befolgung des Rezepts hergestellt wird. Verschiedene Klassen können unterschiedliche Objekte produzieren, ebenso wie verschiedene Rezepte unterschiedliche Gerichte produzieren.

So wie PHP mit einer Reihe von integrierten Funktionen ausgestattet ist, die Sie aufrufen können, verfügt PHP mit einer Bibliothek von Klassen, aus denen Sie Objekte erstellen können. Neues PDO fordert PHP daher an, ein neues PDO-Objekt zu erstellen-dh ein neues Objekt der integrierten PDO-Klasse.

In PHP ist ein Objekt ein Wert, genau wie eine Zeichenfolge, Zahl oder ein Array. Sie können ein Objekt in einer Variablen speichern oder es an eine Funktion als Argument übergeben - das gleiche Zeug, das Sie mit anderen PHP -Werten tun können. Objekte haben jedoch einige nützliche zusätzliche Funktionen.

Zuallererst verhält sich ein Objekt wie ein Array sehr ähnlich, da es als Container für andere Werte fungiert. Wie wir in Kapitel 2 gesehen haben, können Sie in einem Array auf einen Wert zugreifen, indem Sie seinen Index angeben (z. B. $ Geburtstage ['Kevin']). Wenn es um Objekte geht, sind die Konzepte ähnlich, aber die Namen und der Code sind unterschiedlich. Anstatt auf den in einem Array -Index gespeicherten Wert zugreifen zu können, greifen wir zu, dass wir auf eine Eigenschaft des Objekts zugreifen. Anstatt quadratische Klammern zu verwenden, um den Namen der Eigenschaft anzugeben, auf die wir zugreifen möchten, verwenden wir Arrow Notation (->)-beispielsweise $ myObject-> seltsamer:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

, während Arrays normalerweise verwendet werden, um eine Liste von ähnlichen -Werten (z. die Eigenschaften einer Datenbankverbindung). Wenn dies alles sind, gäbe es nicht viel auf sie: Wir könnten genauso gut ein Array verwenden, um diese Werte zu speichern, oder? Natürlich tun Objekte mehr. Zusätzlich zur Speicherung einer Sammlung von Eigenschaften und ihren Werten können Objekte eine Gruppe von Funktionen enthalten, die uns nützlichere Funktionen bieten. Eine in einem Objekt gespeicherte Funktion wird als Methode bezeichnet (einer der verwirrenderen Namen in der Programmierwelt, wenn Sie mich fragen). Eine Methode ist nur eine Funktion in einer Klasse. Wenn wir unsere eigenen Klassen schreiben, werden Methoden mit dem Schlüsselwort der Funktion definiert! Sogar erfahrene Entwickler verwenden oft fälschlicherweise

Funktion

und Methode austauschbar. Um eine Methode aufzurufen, verwenden wir erneut die Arrow-Notation-$ myObject-> somemethod ():

Genau wie eigenständige Funktionen können Methoden Argumente annehmen und Werte zurückgeben.
new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In diesem Stadium klingt dies wahrscheinlich alles etwas kompliziert und sinnlos, aber vertrauen Sie mir: Zusammenlegen von Variablensammlungen (Eigenschaften) und Funktionen (Methoden) in kleine Bündel, die als Objekte bezeichnet werden, führt zu viel ordentlicher und leichter zu lesen Code für bestimmte Aufgaben - Arbeiten mit einer Datenbank nur einer davon. Eines Tages möchten Sie sogar benutzerdefinierte Klassen entwickeln, mit denen Sie Objekte für Ihre eigene Entwicklung erstellen können.

Im Moment bleiben wir jedoch bei den Klassen, die in PHP enthalten sind. Arbeiten wir weiter mit dem von uns erstellten PDO -Objekt zusammen und sehen, was wir tun können, indem wir eine seiner Methoden aufrufen.

Konfigurieren der Verbindung

Ich habe Ihnen bisher gezeigt, wie Sie ein PDO -Objekt erstellen, um eine Verbindung mit Ihrer MySQL -Datenbank herzustellen, und wie Sie eine aussagekräftige Fehlermeldung anzeigen, wenn etwas schief geht:

Unter der Annahme, dass die Verbindung erfolgreich ist, müssen Sie sie jedoch vor der Verwendung konfigurieren. Sie können Ihre Verbindung konfigurieren, indem Sie einige Methoden Ihres neuen PDO -Objekts aufrufen.
$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Bevor Sie Abfragen an die Datenbank senden, müssen wir die Zeichencodierung unserer Datenbankverbindung konfigurieren. Wie ich in Kapitel 2 kurz erwähnt habe, sollten Sie in Ihren Websites den utf-8-codierten Text verwenden, um den Bereich der Charaktere zu maximieren, die Benutzer beim Ausfüllen von Formularen auf Ihrer Website zur Verfügung stehen. Wenn PHP eine Verbindung zu MySQL herstellt, wird standardmäßig die einfachere ISO-8859-1 (oder Latin-1) -Codierung anstelle von UTF-8 verwendet. Wenn wir es so lassen würden, wie es ist, können wir nicht leicht chinesische, arabische oder nicht englische Charaktere einfügen.

Auch wenn Sie zu 100% sicher sind, dass Ihre Website nur von englischen Sprechern verwendet wird, gibt es andere Probleme, indem Sie den Zeichensatz nicht festlegen. Wenn Ihre Webseite nicht auf UTF-8 eingestellt ist, werden Sie Probleme begegnen, wenn Leute bestimmte Zeichen wie lockige Zitate in ein Textfeld schreiben, da sie in der Datenbank als anderes Zeichen angezeigt werden.

Daher müssen wir jetzt unser neues PDO-Objekt so festlegen, dass die UTF-8-Codierung verwendet wird.

Wir können PHP anweisen, UTF-8 zu verwenden, wenn Sie die Datenbank abfragen, indem Sie anhängen; charSet = utf8mb4 in die Verbindungszeichenfolge. Dies gibt keine Nachteile, vorausgesetzt, Ihr PHP-Skript wird auch als UTF-8 an den Browser gesendet (was in den letzten PHP-Versionen die Standardeinstellung ist):

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hinweis: Wenn Sie suchen, finden Sie verschiedene Möglichkeiten, den Charset festzulegen, und frühere Ausgaben dieses Buches haben Sie angewiesen, diesen Code zu verwenden:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies liegt daran, dass die Zeichenoption bis zum Php 5.3.6 nicht korrekt von PHP angewendet wurde. Da dies in einer PHP -Version festgelegt ist, die Sie tatsächlich verwenden werden, ist das Einstellen des Zeichensets als Teil der Verbindungszeichenfolge die bevorzugte Option.

Der vollständige Code, mit dem wir eine Verbindung zu MySQL herstellen und diese Verbindung anschließend konfigurieren, ist daher unten angezeigt.

Beispiel: Mysql-Connect-Complete

$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

starten Sie dieses Beispiel in Ihrem Browser. (Wenn Sie Ihren Datenbankcode in index.php im öffentlichen Verzeichnis und in der Datei output.html.php im Vorlagenverzeichnis platziert haben, ist die URL für die Seite https://v.je/.)

Wenn Ihr Server in Betrieb ist und alles ordnungsgemäß funktioniert, sollten Sie eine Nachricht sehen, die den Erfolg anzeigt.

Anzeigen von Daten von MySQL im Web: Eine Einführung

Wenn PHP keine Verbindung zu Ihrem MySQL -Server herstellen kann oder wenn der von Ihnen angegebene Benutzername und Kennwort falsch sind, sehen Sie stattdessen einen ähnlichen Bildschirm wie unten gezeigt. Um sicherzustellen, dass Ihr Fehlerhandlingscode ordnungsgemäß funktioniert, möchten Sie Ihr Passwort möglicherweise absichtlich falsch geschrieben, um ihn zu testen.

Anzeigen von Daten von MySQL im Web: Eine Einführung

Dank unseres Fangblocks wurde die Fehlermeldung aus der Datenbank auf der Seite enthalten:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Methode getMessage () gibt eine Nachricht zurück, die die Ausnahme beschreibt. Es gibt einige andere Methoden - einschließlich GetFile () und getline () -, um den Dateinamen und die Zeilennummer zurückzugeben, die die Ausnahme ausgelöst wurde. Sie können eine sehr detaillierte Fehlermeldung wie folgt erstellen:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies ist unglaublich nützlich, wenn Sie eine große Website mit Dutzenden von Include -Dateien haben. In der Fehlermeldung wird genau angegeben, in welcher Datei Sie nachsehen sollen und in welcher Zeile der Fehler aufgetreten ist.

Wenn Sie neugierig sind, geben Sie einige andere Fehler in Ihren Datenbankverbindungscode ein (z. B. einen falsch geschriebenen Datenbanknamen) und beobachten Sie die detaillierten Fehlermeldungen, die Ergebnis sind. Wenn Sie fertig sind und Ihre Datenbankverbindung korrekt funktioniert, kehren Sie zur einfachen Fehlermeldung zurück. Auf diese Weise werden Ihre Besucher nicht mit technischem Gobbledygook bombardiert, wenn ein echtes Problem mit Ihrem Datenbankserver auftritt.

Mit einer festgelegten Verbindung und einer ausgewählten Datenbank können Sie mit den in der Datenbank gespeicherten Daten beginnen.

Sie fragen sich vielleicht, was mit der Verbindung mit dem MySQL -Server passiert, nachdem das Skript ausgeführt wurde. Wenn Sie wirklich möchten, können Sie PHP zum Trennen des Servers zwingen, indem Sie das PDO -Objekt abwerfen, das Ihre Verbindung darstellt. Sie tun dies, indem Sie die Variable mit dem Objekt auf null einstellen:

$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

, so heißt es, dass PHP alle offenen Datenbankverbindungen automatisch schließt, wenn es ausgeführt wird, dass Ihr Skript ausgeführt wird, sodass Sie normalerweise nur PHP nach Ihnen aufräumen können.

SQL -Abfragen mit PHP

senden

In Kapitel 3 haben wir mit dem MySQL -Datenbankserver mithilfe von MySQL Workbench verbunden, mit der wir SQL -Abfragen (Befehle) eingeben und die Ergebnisse dieser Abfragen sofort anzeigen konnten. Das PDO -Objekt bietet einen ähnlichen Mechanismus - die Exec -Methode:

try {
  ⋮ do something risky
}
catch (ExceptionType $e) {
  ⋮ handle the exception
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

$ query ist eine Zeichenfolge, die die SQL -Abfrage enthält, die Sie ausführen möchten.

Wie Sie wissen, wird diese Methode eine PDOException, damit Sie in Ihrer SQL -Abfrage einen Schreibfehler gemacht haben, wenn Sie ein Problem mit der Ausführung der Abfrage ausführen (z.

Betrachten Sie das folgende Beispiel, in dem versucht wird, die in Kapitel 3 erstellte Witztabelle zu produzieren,

Beispiel: Mysql-create

try {
  $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
    ’mypassword’);
  $output = 'Database connection established.';
}
catch (PDOException $e) {
  $output = 'Unable to connect to the database server.';
}

include  __DIR__ . '/../templates/output.html.php';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Beachten Sie, dass wir den gleichen Versuch verwenden… Catch -Statement -Technik, um mögliche Fehler zu bewältigen, die von der Abfrage erstellt werden. Es wäre möglich, mehrere Versuche zu verwenden. Fangen Sie Blöcke, um verschiedene Fehlermeldungen anzuzeigen - eine für die Verbindung und eine für die Abfrage -, dies kann jedoch zu einer beträchtlichen Menge zusätzlicher Code führen.

Stattdessen habe ich mich für die gleiche Versuchsanweisung entschieden, sowohl die Verbindung als auch die Abfrage zu enthalten. Der Versuch… Catch Block hört auf, Code auszuführen, sobald ein Fehler auftritt. Wenn also während der Datenbankverbindung ein Fehler auftritt Eine Verbindung muss hergestellt worden sein.

Dieser Ansatz gibt uns etwas weniger Kontrolle über die angezeigte Fehlermeldung, speichert jedoch eine Versuch, die Anweisung für jeden Datenbankvorgang zu tippen. Später in diesem Buch werden wir diese in verschiedene Blöcke zerlegen, aber im Moment alle Datenbankvorgänge im selben Try -Block behalten.

In diesem Beispiel wird auch die GetMessage -Methode verwendet, um eine detaillierte Fehlermeldung aus dem MySQL -Server abzurufen. Das folgende Bild zeigt den Fehler, der angezeigt wird, wenn beispielsweise die Witztabelle bereits vorhanden ist.

Anzeigen von Daten von MySQL im Web: Eine Einführung

Für das Löschen, Einfügen und Aktualisieren von Abfragen (die zur Änderung gespeicherter Daten dienen) gibt die EXEC -Methode die Anzahl der von der Abfrage betroffenen Tabellenzeilen (Einträge) zurück. Betrachten Sie den folgenden SQL -Befehl, den wir in Kapitel 3 verwendet haben, um die Daten aller Witze festzulegen, die das Wort „Programmierer“ enthielten.

Beispiel: Mysql-update

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Durch Speichern des von der EXEC -Methode in $ betroffenen ROWS zurückgegebenen Wert können wir die Variable in der $ -Ausgangsvariablen für das Drucken in der Vorlage verwenden.

Das Bild unten zeigt die Ausgabe dieses Beispiels, vorausgesetzt, es gibt nur einen „Programmierer“ -Witz in Ihrer Datenbank.

Anzeigen von Daten von MySQL im Web: Eine Einführung

Wenn Sie die Seite aktualisieren, um dieselbe Abfrage erneut auszuführen, sollten Sie die Nachrichtenänderung sehen, wie im folgenden Bild gezeigt. Es zeigt an, dass keine Zeilen aktualisiert wurden, da das neue Datum, das auf die Witze angewendet wird

Anzeigen von Daten von MySQL im Web: Eine Einführung

Ausgewählte Abfragen werden etwas anders behandelt, da sie viele Daten abrufen können, und PHP bietet Möglichkeiten, diese Informationen zu bewältigen.

Handhabung Auswählen von Ergebnismengen

Für die meisten SQL -Abfragen funktioniert die EXEC -Methode gut. Die Abfrage macht etwas mit Ihrer Datenbank und Sie erhalten die Anzahl der betroffenen Zeilen (falls vorhanden) aus dem Rückgabewert der Methode. Wählen Sie jedoch Abfragen aus, benötigen jedoch etwas Leichtes als Exec. Sie werden sich erinnern, dass ausgewählte Abfragen verwendet werden, um gespeicherte Daten in der Datenbank anzuzeigen. Anstatt nur die Datenbank zu beeinflussen, wählen Abfragen Ergebnisse - und wir benötigen eine Methode, um sie zurückzugeben.

Die Abfragemethode sieht genau wie EXEC aus, als sie eine SQL -Abfrage als Argument akzeptiert, das an den Datenbankserver gesendet werden soll. Was es jedoch zurückgibt, ist ein Pdostatement -Objekt, das eine Ergebnismenge mit einer Liste aller Zeilen (Einträge) darstellt, die aus der Abfrage zurückgegeben wurden:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
vorausgesetzt, dass bei der Verarbeitung der Abfrage kein Fehler aufgetreten ist, speichert dieser Code einen Ergebnissatz (in Form eines PDOSTATEMENT -Objekts) in das Variable $ -Strat. Dieses Ergebnissatz enthält den Text aller in der Witztabelle gespeicherten Witze. Da die Anzahl der Witze in der Datenbank keine praktische Begrenzung gibt, kann das Ergebnissatz ziemlich groß sein.

Ich habe in Kapitel 2 bereits erwähnt, dass die while -Schleife eine nützliche Kontrollstruktur ist, wenn wir schleifen müssen, aber nicht wie oft wissen. Wir können keine für die Schleife verwenden, da wir nicht wissen, wie viele Aufzeichnungen die Abfrage zurückgegeben haben. In der Tat könnten Sie hier eine Weile Schleife verwenden, um die Zeilen im Ergebnis einzelnen einzeln zu verarbeiten:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Bedingung für die while -Schleife unterscheidet sich wahrscheinlich von den Bedingungen, an die Sie gewohnt sind. Lassen Sie mich also erklären, wie es funktioniert. Betrachten Sie die Bedingung als eine Aussage von selbst:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Fetch -Methode des Pdostatement -Objekts gibt die nächste Zeile im Ergebnis als Array zurück (wir haben Arrays in Kapitel 2 besprochen). Wenn die Ergebnismenge keine Zeilen mehr gibt, gibt Fetch stattdessen false zurück. (Dies ist ein Fall, in dem ein PDO -Objekt auffordert . Nun, die obige Anweisung weist der $ row -Variablen einen Wert zu, aber gleichzeitig nimmt die Anweisung als Ganzes denselben Wert an. Mit diesem können Sie die Anweisung als Bedingung in der while -Schleife verwenden. Da eine Weile die Schleife weiterhin schleifen, bis deren Zustand auf False bewertet wird, tritt diese Schleife so oft auf, wie es Zeilen im Ergebnis -Set gibt, wobei $ row den Wert der nächsten Zeile jedes Mal annimmt, wenn die Schleife ausgeführt wird. Es bleibt nur noch herauszufinden, wie die Werte bei jedem Ausführen der Schleife aus der Variablen $ row abgerufen werden können.

Zeilen eines von Fetch zurückgegebenen Ergebniszeilens werden als assoziative Arrays dargestellt, wobei die nach den Tabellenspalten benannten Indizes im Ergebnissatz benannt sind. Wenn $ row eine Zeile in unserem Ergebnis -Set ist, ist $ row ['jokeText'] der Wert in der Spalte von Joketext dieser Zeile.

Unser Ziel in diesem Code ist es, den Text aller Witze zu speichern, damit wir sie in einer PHP -Vorlage anzeigen können. Der beste Weg, dies zu tun, besteht darin, jeden Witz als neuer Artikel in einem Array zu speichern, $ Witze:

Wenn die Witze aus der Datenbank herausgezogen sind, können wir sie jetzt an eine PHP -Vorlagen -Witze übergeben.html.php.

$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
zusammenfassen, hier ist der Code des Controllers für dieses Beispiel:

Die Variable $ witze ist ein Array, das eine Liste von Witzen speichert. Wenn Sie den Inhalt des Arrays in PHP ausgeschrieben haben, würde es ungefähr so ​​aussehen:

try {
  ⋮ do something risky
}
catch (ExceptionType $e) {
  ⋮ handle the exception
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Daten wurden jedoch aus der Datenbank abgerufen, anstatt manuell in den Code tippt.

try {
  $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
    ’mypassword’);
  $output = 'Database connection established.';
}
catch (PDOException $e) {
  $output = 'Unable to connect to the database server.';
}

include  __DIR__ . '/../templates/output.html.php';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Sie werden festgestellt, dass zwei verschiedene Variablen festgelegt werden - $ Witze und $ Fehler -, je nachdem, ob der Try -Block erfolgreich ausgeführt wird oder nicht.

In der Vorlage von wokes.html.php müssen wir den Inhalt des $ -Cookes -Array oder die in der $ -Fehlervariablen enthaltene Fehlermeldung anzeigen.

Um zu überprüfen, ob eine Variable ein Wert zugewiesen wurde oder nicht, können wir die ISSET -Funktion verwenden, die wir zuvor zur Überprüfung verwendet haben, ob ein Formular eingereicht wurde. Die Vorlage kann eine IF -Anweisung enthalten, um festzustellen, ob der Fehler oder die Liste der Witze angezeigt werden soll:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hier gibt es nichts Neues, als die Witze anzuzeigen, wir müssen den Inhalt des $ -Cookes -Arrays anzeigen. Im Gegensatz zu anderen Variablen, die wir bis zu diesem Zeitpunkt verwendet haben, enthält das $ -Cokes -Array mehr als nur einen einzelnen Wert.

Die häufigste Möglichkeit, ein Array in PHP zu verarbeiten, besteht darin, eine Schleife zu verwenden. Wir haben bereits während Schleifen und für Schleifen gesehen. Die Foreach -Schleife ist besonders hilfreich für die Verarbeitung von Arrays:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Anstelle einer Bedingung enthalten die Klammern oben in einer Foreach -Schleife ein Array, gefolgt vom Schlüsselwort AS und dann des Namens einer neuen Variablen, mit der jedes Element des Arrays nacheinander gespeichert wird. Der Körper der Schleife wird dann für jedes Element im Array einmal ausgeführt. Jedes Mal, wenn dieses Element in der angegebenen Variablen gespeichert ist, damit der Code direkt darauf zugreifen kann.

Es ist üblich, eine Foreach -Schleife in einer PHP -Vorlage zu verwenden, um jedes Element eines Arrays nacheinander anzuzeigen. So könnte dies nach unserem $ -Cokes -Array suchen:

$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Mit dieser Mischung aus PHP -Code, um den Loop- und HTML -Code zum Anzeigen zu beschreiben, sieht der Code ziemlich unordentlich aus. Aus diesem Grund ist es üblich, eine alternative Art zum Schreiben der Foreach -Schleife zu verwenden, wenn sie in einer Vorlage verwendet wird:

try {
  ⋮ do something risky
}
catch (ExceptionType $e) {
  ⋮ handle the exception
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die beiden Code -Teile sind funktional identisch, aber letzteres sieht beim Mischen mit HTML -Code freundlicher aus. So sieht diese Form des Codes in einer Vorlage aus:

try {
  $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
    ’mypassword’);
  $output = 'Database connection established.';
}
catch (PDOException $e) {
  $output = 'Unable to connect to the database server.';
}

include  __DIR__ . '/../templates/output.html.php';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Das Gleiche kann mit der IF -Anweisung erfolgen, so

try {
  $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
    'mypassword');
   $output = 'Database connection established.';
}
catch (PDOException $e) {
  $output = 'Unable to connect to the database server: ' . $e->getMessage();
}

include  __DIR__ . '/../templates/output.html.php';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Mit diesen neuen Tools in der Hand können wir unsere Vorlage schreiben, um die Liste der Witze anzuzeigen.

Beispiel: Mysql-listJokes

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Script Output</title>
  </head>
  <body>
      <?php echo $output; ?>
  </body>
</html>
Nach dem Login kopieren
entweder der $ error -Text wird auf der Seite angezeigt oder jeder Witz wird in einem Absatz (

) angezeigt, der in einem Block -Zitat (

) enthalten ist, da wir den Autor eines jeden Witzes in diesem Witz effektiv zitieren Seite.

Weil Witze möglicherweise möglicherweise Zeichen enthalten, die als HTML -Code interpretiert werden könnten (z. B. oder &), müssen wir HTMLSpecialChars verwenden, um sicherzustellen ; und & amp;) damit sie richtig angezeigt werden.

Das folgende Bild zeigt, wie diese Seite aussieht, wenn Sie der Datenbank ein paar Witze hinzugefügt haben.

Anzeigen von Daten von MySQL im Web: Eine Einführung

Erinnern Sie sich, wie wir eine Weile in unserem Controller eine Weile verwendet haben, um die Zeilen aus dem PDOSTATEMENT -Ergebnis herauszuholen.

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Es stellt sich heraus, dass Pdostatement -Objekte so konzipiert sind, dass sie sich genauso wie Arrays verhalten, wenn Sie sie an einen Foreach -Schleifen übergeben. Sie können Ihren Datenbankverarbeitungscode daher mit einer Foreach -Schleife anstelle einer Weile -Schleife geringfügig vereinfachen:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Ich werde diese ordinere Foreach -Form im Rest dieses Buches verwenden.

Ein weiteres ordentliches Werkzeug, das PHP bietet, ist eine Abkürzung, um den Echo -Befehl anzurufen - was wir, wie Sie bereits gesehen haben, häufig verwenden müssen. Unsere Echo -Aussagen sehen so aus:

$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Stattdessen können wir dies verwenden:

try {
  ⋮ do something risky
}
catch (ExceptionType $e) {
  ⋮ handle the exception
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Das tut genau dasselbe. = bedeutet Echo und gibt Ihnen eine etwas kürzere Möglichkeit, Variablen zu drucken. Dies ist jedoch eine Einschränkung: Wenn Sie = Verwenden, können Sie nur drucken. Sie können nicht einfügen, ob Aussagen, für Aussagen usw., obwohl Sie eine Verkettung verwenden können, und dies kann von einem Funktionsaufruf folgen.

Hier ist eine aktualisierte Vorlage mit dem Shorthand Echo.

Beispiel: Mysql-listJokes-rot.

try {
  $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
    ’mypassword’);
  $output = 'Database connection established.';
}
catch (PDOException $e) {
  $output = 'Unable to connect to the database server.';
}

include  __DIR__ . '/../templates/output.html.php';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Ich werde die Kurznotation verwenden, wenn sie ab diesem Zeitpunkt anwendbar ist.

Hinweis: In Versionen von PHP vor 5.4 erforderte diese Kurzbeschreibung eine ziemlich ungewöhnliche PHP -Einstellung, um dies zu aktivieren, sodass sie aus Kompatibilitätsgründen entmutigt wurde. Die Verwendung der Kurznotation hat möglicherweise dazu geführt, dass Ihr Code nicht mehr funktioniert, wenn Sie sich von einem Server bewegt, der ihn aktiviert hat, der dies nicht getan hat.

Ab PHP 5.4 (also jede Version, auf die Sie heutzutage realistisch begegnen werden), funktioniert das Kurzstift -Echo unabhängig von PHP .

Voraus denken

In dem Beispiel, das wir uns gerade angesehen haben, haben wir eine Vorlage erstellt, jokes.html.php, die alle HTML enthält, die für die Anzeige der Seite erforderlich sind. Wenn unsere Website wächst, werden wir jedoch weitere Seiten hinzufügen. Wir möchten auf jeden Fall eine Seite, damit die Leute der Website Witze hinzufügen können, und wir benötigen auch eine Homepage mit Einführungstext, eine Seite mit den Kontaktdetails des Besitzers und, wenn die Website wächst, vielleicht sogar Eine Seite, auf der Personen sich an der Website anmelden können.

Ich springe hier einiges voran, aber es lohnt sich immer, darüber nachzudenken, wie ein Projekt wachsen wird. Wenn wir den Ansatz anwenden, den wir gerade für jokes.html.php auf den Rest der Vorlagen verwendet haben - addjoke.html.php, home.html.php, contact.html.php, login.html.php usw. ll endet mit vielen wiederholten Code.

Auf jeder Seite auf der Website ist eine Vorlage erforderlich, die ungefähr so ​​aussieht:

try {
  $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
    'mypassword');
   $output = 'Database connection established.';
}
catch (PDOException $e) {
  $output = 'Unable to connect to the database server: ' . $e->getMessage();
}

include  __DIR__ . '/../templates/output.html.php';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Als Programmierer ist es eines der schlimmsten Dinge, die Sie tun können. Tatsächlich beziehen sich Programmierer oft auf das Trockenprinzip, das für "nicht wiederholt" steht. Wenn Sie die Codeabschnitte wiederholen, gibt es mit ziemlicher Sicherheit eine bessere Lösung.

Alle besten Programmierer sind faul, und der Wiederholungscode bedeutet, die Arbeit zu wiederholen. Durch die Verwendung dieses Kopier-/Einfügen -Ansatzes für Vorlagen ist die Website sehr schwierig zu warten. Stellen wir uns vor, es gibt eine Fußzeile und einen Navigationsbereich, den wir auf jeder Seite erscheinen möchten. Unsere Vorlagen würden jetzt so aussehen:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

wir werden 2022 auf ein Problem stoßen! Wenn die Vorlagen für alle Seiten auf der Website - beispielsweise jokes.html.php addjoke.html.php, home.html.php, contact.html.php andlogin.html.php - enthalten Code in der obigen Struktur enthalten Aktualisieren Sie das Jahr in der Copyright -Mitteilung auf „2022“, die Sie jeden Vorlagen öffnen und das Datum ändern müssen.

Wir könnten klug sein und das Datum dynamisch aus der Uhr des Servers (Echo -Datum ('Y') lesen; wenn Sie neugierig sind!), Um dieses Problem zu vermeiden, aber was ist, wenn wir ein -Tag hinzufügen wollten das war auf jeder Seite enthalten? Oder fügen Sie einen neuen Link zum Menü hinzu? Wir müssten noch jede Vorlagendatei öffnen und sie ändern!

fünf oder sechs Vorlagen ändern, kann etwas ärgerlich sein, aber es wird kein großes Problem darstellen. Was ist jedoch, wenn die Website auf Dutzende oder Hunderte von Seiten wächst? Jedes Mal, wenn Sie einen Link zu dem Menü hinzufügen möchten, müssen Sie jede einzelne Vorlage öffnen und ändern.

Dieses Problem könnte mit einer Reihe von Include -Aussagen gelöst werden. Zum Beispiel:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Aber diese Methode erfordert Hellseherdienste: Wir müssen genau vorhersehen, welche Änderungen möglicherweise in Zukunft vorgenommen werden müssen, und relevante Einfügungsanweisungen an den Orten, die von uns vorhersehen, werden vorhersehen.

In dem obigen Beispiel ist es beispielsweise einfach, neue Menüeinträge hinzuzufügen, indem sie nav.html.php hinzugefügt werden. Hinzufügen eines <script> -Tags zu jeder Seite oder sogar etwas so Triviales wie das Hinzufügen einer CSS -Klasse zu Hinzufügen zu Das NAV -Element bedeutet immer noch, jede Vorlage zu öffnen, um die Änderung vorzunehmen. </script>

Es gibt keine Möglichkeit, alle Änderungen, die möglicherweise im Laufe der Lebensdauer der Website benötigt werden, genau vorherzusagen. Stattdessen ist der Ansatz, den ich Ihnen zu Beginn dieses Kapitels gezeigt habe

$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Wenn wir diese Vorlage immer einfügen, die wir layout.html.php aufrufen werden, ist es möglich, die $ Ausgangsvariable auf einige

HTML -Code festzulegen und sie mit der Navigation und der Navigation und auf der Seite erscheinen zu lassen. Fußzeile. Der Vorteil davon ist, dass wir es nur an einem Ort ändern müssen, um das Datum auf jeder Seite der Website zu ändern.

Ich habe mich auch in eine $ -Tit -Variable geschlichen, sodass jeder Controller einen Wert definieren kann, der zwischen den Tags und zusammen mit einigen CSS (verfügbar als Witze.css im Beispielcode) zum Erstellen von CSS erscheint die Seite ein wenig schöner.

Anzeigen von Daten von MySQL im Web: Eine Einführung

Jeder Controller kann jetzt verwenden, einschließlich __dir__. '/../templates/layout.html.php'; und Werte für $ output und $ title.

unsere jokes.php mit layout.html.php wird wie unten gezeigt codiert.

Beispiel: Mysql-listJokes-layout-1

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Aber warte! Was ist mit $ Output im Try -Block los? Die Variable $ output enthält tatsächlich einen HTML -Code: Die Schleife erstellt eine Zeichenfolge, die den HTML -Code für die Jokes -Liste enthält.

Grundsätzlich möchten wir das passieren: Die $ Ausgangsvariable enthält den HTML -Code, der zwischen der Navigation und der Fußzeile im Layout.html.php eingefügt wird, aber ich denke, Sie werden zustimmen, dass der Code der Code ist unglaublich hässlich.

Ich habe Ihnen bereits gezeigt, wie Sie das Mischen von HTML- und PHP -Code über die Anweisung vermischen. Wie wir zuvor waren es gut, die HTML für die Anzeige der Witze in seine eigene Datei zu verschieben - diesmal jedoch nur der HTML -Code, der für die Seite der Witzliste eindeutig ist.

jokes.html.php im Vorlagenverzeichnis sollte diesen Code enthalten:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wichtig ist, dass dies nur der Code für die Anzeige der Witze ist. Es enthält nicht die Navigation, die Fußzeile,

Tag oder irgendetwas, das wir auf jeder Seite wiederholen möchten. Es ist nur der HTML -Code, der für die Seite der Witzliste eindeutig ist.

Um diese Vorlage zu verwenden, können Sie Folgendes versuchen:

$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

oder wenn Sie sehr klug sind:

try {
  ⋮ do something risky
}
catch (ExceptionType $e) {
  ⋮ handle the exception
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Mit diesem Ansatz wäre Ihre Logik völlig gesund. Wir müssen Witze einbeziehen.html.php. Leider führt die Include -Anweisung nur den Code aus der enthaltenen Datei an dem angerufenen Punkt aus. Wenn Sie den obigen Code ausführen, ist die Ausgabe tatsächlich so etwas:

try {
  $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
    ’mypassword’);
  $output = 'Database connection established.';
}
catch (PDOException $e) {
  $output = 'Unable to connect to the database server.';
}

include  __DIR__ . '/../templates/output.html.php';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Weil Witze.html.php zuerst enthalten sind, wird es zuerst an den Browser gesendet. Was wir tun müssen, ist das Laden von Witzen.html.php, aber anstatt die Ausgabe direkt an den Browser zu senden, müssen wir sie erfassen und in der $ -Ausgangsvariablen speichern, damit sie später durch Layout.html.php verwendet werden kann .

Die Include -Anweisung gibt keinen Wert zurück, daher $ output = include 'jokes.html.php'; hat nicht den gewünschten Effekt und PHP hat keine alternative Aussage dazu. Das bedeutet jedoch nicht, dass es nicht möglich ist.

PHP verfügt über eine nützliche Funktion namens "Ausgangspufferung". Es mag kompliziert klingen, aber das Konzept ist tatsächlich sehr einfach: Wenn Sie Echo verwenden, um etwas zu drucken oder eine Datei mit HTML einzuschließen, wird es normalerweise direkt an den Browser gesendet. Durch die Verwendung der Ausgabepufferung wird der HTML -Code in einem "Puffer" auf dem Server auf dem Server gespeichert, der im Grunde genommen nur eine Zeichenfolge enthält, die bisher gedruckt wurde.

Noch besser, mit PHP können Sie den Puffer einschalten und seinen Inhalt jederzeit lesen.

Es gibt zwei Funktionen, die wir brauchen:

  • ob_start (), das den Ausgangspuffer startet. Nach dem Aufrufen dieser Funktion wird alles, was über Echo oder HTML gedruckt wird, das über Include gedruckt wird, in einem Puffer und nicht an den Browser gesendet.
  • ob_get_clean (), der den Inhalt des Puffers zurückgibt und es löscht.

Wie Sie wahrscheinlich vermutet haben, steht "OB" in den Funktionsnamen für "Ausgabepuffer".

Um den Inhalt einer enthaltenen Datei zu erfassen, müssen wir nur diese beiden Funktionen verwenden:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn dieser Code ausgeführt wird, enthält die $ Ausgangsvariable die HTML, die in der Witze.html.php -Vorlage generiert wurde.

Wir werden diesen Ansatz von nun an verwenden. Jede Seite besteht aus zwei Vorlagen:

  • layout.html.php, das alle gemeinsamen HTML enthält, die von jeder Seite
  • benötigt werden.
  • Eine eindeutige Vorlage, die nur den HTML -Code enthält, der für diese bestimmte Seite eindeutig ist

Die kompletten Witze.php sieht so aus:
new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Lassen Sie uns den Link "Home" durch Hinzufügen einer Index.Php -Datei funktionieren. Wir könnten alles auf diese Seite setzen: die neuesten Witze, der beste Witz des Monats oder was auch immer wir mögen. Im Moment halten wir es einfach und haben nur eine Nachricht mit der Aufschrift "Willkommen in der Internet -Witz -Datenbank".

Erstellen Sie eine Datei namens Home.html.php im Vorlagenordner:
$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

unser index.php ist wesentlich einfacher als witze.html.php. Es wird keine Informationen aus der Datenbank enthält, daher benötigt sie keine Datenbankverbindung und wir benötigen keine Versuch ... Catch -Anweisung, daher laden wir einfach die beiden Vorlagen und setzen die Variablen $ title und $ output .

Beispiel: Mysql-listJokes-layout-3
try {
  ⋮ do something risky
}
catch (ExceptionType $e) {
  ⋮ handle the exception
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hinweis: Es ist eine gute Praxis, nur dann eine Verbindung zur Datenbank herzustellen. Datenbanken sind auf vielen Websites der häufigste Leistungs Engpass. Daher ist es bevorzugt, so wenige Verbindungen wie möglich herzustellen.

Test, dass beide Seiten in Ihrem Browser arbeiten. Sie sollten eine Liste von Witzen sichtbar lassen, wenn Sie https://v.je/jokes.php und die Begrüßungsnachricht unter https://v.je/jokes.php besuchen. Beide Seiten sollten die Navigation und die Fußzeile enthalten.

Versuchen Sie, das Layout zu ändern. Die Änderungen, die Sie vornehmen, werden auf beiden Seiten angezeigt. Wenn die Website Dutzende von Seiten hätte, würde sich Änderungen am Layout auf jede Seite auswirken.

Daten in die Datenbank einfügen

In diesem Abschnitt werde ich demonstrieren, wie Sie die Ihnen zur Verfügung stehenden Tools verwenden, damit die Site -Besucher der Datenbank ihre eigenen Witze hinzufügen können.

Wenn Sie Ihre Website -Besucher neue Witze eingeben lassen möchten, benötigen Sie offensichtlich ein Formular. Hier ist eine Vorlage für ein Formular, das zur Rechnung passt:
try {
  $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
    ’mypassword’);
  $output = 'Database connection established.';
}
catch (PDOException $e) {
  $output = 'Unable to connect to the database server.';
}

include  __DIR__ . '/../templates/output.html.php';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

speichern Sie dies als addjoke.html.php im Vorlagenverzeichnis.

Der wichtigste Teil des
-Elements ist das Aktionsattribut. Das Aktionsattribut teilt dem Browser mit, wo die Daten nach der Übermittlung des Formulars gesendet werden sollen. Dies kann der Name einer Datei sein, z. B. "addjoke.php".

Wenn Sie das Attribut jedoch leer lassen, indem Sie es auf "" festlegen, werden die vom Benutzer bereitgestellten Daten an die Seite, die Sie derzeit anzeigen, zurückgesandt. Wenn die URL des Browsers die Seite als addjoke.php anzeigt, wurden die Daten gesendet, wenn der Benutzer die Taste hinzufügen.

Binden wir dieses Formular in das vorhergehende Beispiel zusammen, in dem die Liste der Witze in der Datenbank angezeigt wurde. Öffnen Sie das Layout.html.php und fügen Sie eine URL zum Link "Ein neuer Witz hinzufügen" hinzu, der zu Addjoke.php:

geht
CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Während Sie layout.html.php offen haben, enthalten das Formular.css Stylesheet aus Kapitel 2, wie ich oben habe. Jetzt hat jedes im Layout angezeigte Formular die zuvor verwendeten Stile.

Wenn dieses Formular eingereicht wird, enthält die Anfrage eine Variable - Joketext -, die den Text des Witzes enthält, der in den Textbereich eingegeben wird. Diese Variable wird dann im von Php erstellten $ _post -Array angezeigt.

Erstellen wir addjoke.php im öffentlichen Verzeichnis. Die grundlegende Logik für diesen Controller lautet:

  • Wenn kein Joketext -Postvariable festgelegt ist, zeigen Sie ein Formular an.
  • Ansonsten fügen Sie den mitgelieferten Witz in die Datenbank ein.

Erstellen Sie dieses Skelett addjoke.php:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Diese Öffnung, wenn Anweisung überprüft, ob das $ _post -Array eine Variable namens Joketext enthält. Wenn es festgelegt ist, wurde das Formular eingereicht. Andernfalls wird das Formular von addjoke.html.php in die $ -Ausgangsvariable für die Anzeige im Browser geladen.

Wenn Sie an diesem Punkt addjoke.php in Ihrem Browser öffnen, sehen Sie das Formular, aber das Eingeben eines Witzes und das Drücken von Add nicht funktioniert, da wir noch nichts mit den in den enthaltenen Daten getan haben $ _Post ['jokeText'].

Um den eingereichten Witz in die Datenbank einzufügen, müssen wir eine Einfügungsabfrage mit dem in $ _post ['Joketext'] gespeicherten Wert ausführen, um die Joketext -Spalte der Witztabelle auszufüllen. Dies kann dazu führen, dass Sie einen solchen Code schreiben:

$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Es gibt jedoch ein ernstes Problem mit diesem Code: Der Inhalt von $ _post ['jokeText'] steht vollständig unter der Kontrolle des Benutzer, der das Formular eingereicht hat. Wenn ein böswilliger Benutzer einen bösen SQL -Code in das Formular eingeben würde, würde dieses Skript ihn ohne Frage auf Ihren MySQL -Server einfügen. Diese Art des Angriffs wird als SQL-Injektionsangriff bezeichnet und in den frühen Tagen von PHP eines der häufigsten Sicherheitslöcher, die Hacker auf PHP-basierten Websites fanden und ausgenutzt haben. (In vielen Programmiernischen sind die SQL -Injektionsangriffe immer noch überraschend effektiv, wie Entwickler sie nicht erwarten. Überlegen Sie diesen bemerkenswerten Versuch, Verkehrskameras zu veranlassen, ihre Datenbanken zu fallen: „SQL -Injektionskennzeichen hofft, Euro -Verkehrskameras zu vereiteln“.)

Ein Benutzer kann dies in das Textfeld eingeben:

try {
  ⋮ do something risky
}
catch (ExceptionType $e) {
  ⋮ handle the exception
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die an die Datenbank gesendete Abfrage wäre wie folgt:

try {
  $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
    ’mypassword’);
  $output = 'Database connection established.';
}
catch (PDOException $e) {
  $output = 'Unable to connect to the database server.';
}

include  __DIR__ . '/../templates/output.html.php';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Aber was ist, wenn der Benutzer in Folgendes angeben:

try {
  $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
    'mypassword');
   $output = 'Database connection established.';
}
catch (PDOException $e) {
  $output = 'Unable to connect to the database server: ' . $e->getMessage();
}

include  __DIR__ . '/../templates/output.html.php';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In diesem Fall ist die an die Datenbank gesendete Abfrage Folgendes:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Da der Witz ein Zitatcharakter enthält, wird MySQL einen Fehler zurückgeben, da das Zitat vor „Get“ als Ende der Zeichenfolge angezeigt wird.

Um dies zu einer gültigen Abfrage zu machen, müssen wir allen Zitaten im Text entkommen, damit die an die Datenbank gesendete Abfrage Folgendes wird:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Daten, die nicht eingefügt werden, wenn es ein Angebot enthält, ist ein nerviges Problem für Benutzer. Sie verlieren alles, was sie tippt. Aber bösartige Benutzer können dies missbrauchen. In älteren Versionen von PHP war es möglich, mehrere Abfragen von PHP durchzuführen, indem sie sie mit einem Semikolon trennen (;).

Stellen Sie sich vor, der Benutzer würde dies in das Feld eingeben:

$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies würde die folgenden Abfragen an die Datenbank senden:

try {
  ⋮ do something risky
}
catch (ExceptionType $e) {
  ⋮ handle the exception
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

- ist ein einzelner Zeilenkommentar in MySQL, daher würde die letzte Zeile ignoriert und die Einfügungsabfrage wird ausgeführt, gefolgt von der Löschabfrage, die der Benutzer in die Box eingeben hatte. Tatsächlich könnte der Benutzer jede Abfrage eingeben, die er in das Feld mochte, und es würde in der Datenbank ausgeführt!

magische Zitate

In den frühen Tagen des PHP wurden SQL-Injektionsangriffe so befürchtet, dass das Team hinter PHP einige eingebaute Schutzmaßnahmen gegen SQL-Injektionen in die Sprache hinzugefügt hat. Erstens deaktiviert sie die Möglichkeit, mehrere Abfragen gleichzeitig zu senden. Zweitens fügten sie so etwas wie magische Zitate hinzu. Diese Schutzfunktion von PHP analysierte automatisch alle vom Browser eingereichten Werte und fügte Backslashes () vor allen „gefährlichen“ Zeichen wie Apostrophes eingefügt - was zu Problemen führen kann, wenn sie versehentlich in einer SQL -Abfrage enthalten sind.

.

Das Problem mit den Magic Quotes -Funktion ist, dass es so viele Probleme verursachte, wie es verhindert hat. Zunächst waren die von ihr erkannten Zeichen und die Methode, mit denen sie sie benachteiligt haben (Präfixen mit einem Backslash), unter bestimmten Umständen nur gültig. Abhängig von der Charaktercodierung Ihrer Website und des von Ihnen verwendeten Datenbankservers könnten diese Maßnahmen völlig ineffektiv sein.

Zweitens, wenn ein eingereichter Wert für einen Zweck verwendet wurde Andere als eine SQL -Abfrage erstellt, könnten diese Backslashes wirklich störend sein. Die Feature der magischen Zitate würde einen falschen Backslash in den Nachnamen des Benutzers einfügen, wenn es einen Apostroph enthielt.

Kurz gesagt, die magischen Zitate waren eine schlechte Idee - so sehr, dass sie von Version 5.4 von PHP entfernt wurde. Aufgrund des Alters von PHP und der Menge an Code da draußen könnten Sie jedoch auf einige Hinweise darauf stoßen, daher lohnt es sich, ein grundlegendes Verständnis dafür zu haben, was die Zitat -Features der magischen Zitate tun sollte.

Sobald magische Zitate als schlechte Idee identifiziert wurden, war der Rat von PHP -Entwicklern, es auszuschalten. Dies bedeutete jedoch, dass es einige Webserver gab, die sich ausgeschaltet hatten und andere eingeschaltet wurden. Dies war ein Kopfschmerz für Entwickler: Sie mussten entweder alle anweisen, die jemals ihren Code verwenden wollten, um ihn auszuschalten - was auf einigen gemeinsamen Servern nicht möglich war - oder zusätzlichen Code schreiben, um dafür zu berücksichtigen.

Die meisten Entwickler wählten letztere, und Sie können auf einen solchen Code stoßen:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie eine IF -Anweisung in Legacy -Code sehen, mit der Sie arbeiten, können Sie den gesamten Block sicher löschen, da kein Code innerhalb der IF -Anweisung jemals in den letzten PHP -Versionen ausgeführt wird.

Wenn Sie einen solchen Code sehen, bedeutet dies, dass der ursprüngliche Entwickler die Probleme mit magischen Zitaten verstanden hat und sein Bestes getan hat, um dies zu verhindern. Ab PHP 5.4 (auf das Sie niemals stoßen sollten, da es nicht mehr unterstützt wird) wird Get_Magic_quotes_gpc () immer falsch zurückgegeben und der Code wird niemals ausgeführt.

Alles, was Sie wirklich über magische Zitate wissen müssen, ist, dass es eine schlechte Lösung für das vorliegende Problem war. Natürlich müssen Sie ohne magische Zitate eine andere Lösung für das Problem finden. Zum Glück kann die PDO -Klasse die ganze harte Arbeit für Sie erledigen, indem sie etwas namens „vorbereitete Aussagen“ verwenden.

vorbereitete Aussagen

Eine vorbereitete Anweisung ist eine spezielle Art von SQL -Abfrage, die Sie im Voraus an Ihren Datenbankserver gesendet haben, um dem Server die Möglichkeit zu geben, sie auf die Ausführung vorzubereiten - aber nicht tatsächlich ausführen. Denken Sie daran, wie ein .php -Skript zu schreiben. Der Code ist da, wird jedoch erst ausgeführt, wenn Sie die Seite in Ihrem Webbrowser besuchen. Der SQL -Code in vorbereiteten Anweisungen kann Platzhalter enthalten, die Sie für später die Werte angeben, wenn die Abfrage ausgeführt wird. Bei der Ausfüllung dieser Platzhalter ist PDO klug genug, um automatisch vor „gefährlichen“ Charakteren zu schützen.

Hier erfahren Sie, wie Sie eine Einfügungsabfrage vorbereiten und sie dann sicher mit $ _post ['Joketext'] als Text des Witzes ausführen:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Lassen Sie uns diese Aussage nach dem anderen aufschlüsseln. Zunächst schreiben wir unsere SQL -Abfrage als PHP -Zeichenfolge und speichern sie wie gewohnt in einer Variablen ($ SQL). Was jedoch an dieser Einfügungsabfrage ungewöhnlich ist, ist, dass für die Joketext -Spalte kein Wert angegeben wird. Stattdessen enthält es einen Platzhalter für diesen Wert (: Joketext). Mach dir gerade keine Sorgen um das Scherzfeld. Wir werden gleich wieder darauf zurückkommen.

Als nächstes nennen wir die Vorbereitungsmethode unseres PDO -Objekts ($ PDO) und übergeben sie unsere SQL -Abfrage als Argument. Dies sendet die Abfrage an den MySQL -Server und fordert sie auf, zu erstellen, um die Abfrage auszuführen. MySQL kann es noch nicht ausführen, da es für die Joketext -Spalte keinen Wert gibt. Die Vorbereitungsmethode gibt ein Pdostatement -Objekt zurück (ja, dieselbe Art von Objekt, die uns die Ergebnisse aus einer Auswahlabfrage gibt), die wir in $ stmt.

speichern

Jetzt, da MySQL unsere Anweisung für die Ausführung erstellt hat, können wir ihm den fehlenden Wert (en) senden, indem wir die BindValue -Methode unseres PDOSTATEMENT -Objekts ($ STMT) aufrufen. Wir nennen diese Methode einmal, damit jeder Wert geliefert wird (in diesem Fall müssen wir nur einen Wert angeben - den Witztext), als Argumente des Platzhalters, den wir ausfüllen möchten (': joketext') und den Wert, den wir ausfüllen möchten, und den Wert, den wir Ich möchte es mit ($ _post ['joketext'] füllen). Da MySQL weiß, dass wir ihm einen diskreten Wert und nicht einen SQL -Code senden, der analysiert werden muss, besteht kein Risiko für Zeichen im Wert, der als SQL -Code interpretiert wird. Bei der Verwendung vorbereiteter Aussagen sind die Schwachstellen der SQL -Injektion einfach nicht möglich!

Schließlich nennen wir die Ausführungsmethode des PDOSTATEMENTS -Objekts, um MySQL zu sagen, dass er die Abfrage mit den von uns gelieferten Wert ausführen soll. (Ja, diese Pdostatement -Methode wird im Gegensatz zu der ähnlichen Methode von PDO -Objekten bezeichnet, die als Exec. PHP bezeichnet wird. PHP hat viele Stärken, aber Konsistenz ist nicht eines davon!)

Eine interessante Sache, die Sie an diesem Code bemerken werden, ist, dass wir nie Zitate um den Witztext platziert haben. : JokeText existiert ohne Zitate in der Abfrage, und als wir BindValue nannten, haben wir ihm den einfachen Witztext aus dem $ _post -Array übergeben. Bei Verwendung vorbereiteter Aussagen benötigen Sie keine Angebote, da die Datenbank (in unserem Fall MySQL) klug genug ist, um zu wissen, dass der Text eine Zeichenfolge ist und sie als solche behandelt wird, wenn die Abfrage ausgeführt wird.

Die anhaltende Frage in diesem Code ist, wie das heutige Datum dem Scherzfeld zugewiesen wird. Wir können einen ausgefallenen PHP-Code schreiben, um das heutige Datum im YYYY-MM-DD-Format zu generieren, das MySQL benötigt, aber es stellt sich heraus, dass MySQL selbst eine Funktion hat-Curdate:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Die MySQL -Curdatfunktion wird hier verwendet, um das aktuelle Datum als Wert der Spalte von Scherz zuzuweisen. MySQL hat tatsächlich Dutzende dieser Funktionen, aber ich werde sie nur nach Bedarf vorstellen.

Jetzt, da wir unsere Anfrage haben, können wir die IF -Erklärung ausfüllen, die wir früher gestartet haben, um die Einreichungen des Formulars „Witz hinzufügen“ zu verarbeiten:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Aber warte! Diese Anweisung hat einen weiteren Trick im Ärmel. Sobald wir den neuen Witz in die Datenbank hinzugefügt haben, möchten wir den Browser des Benutzers auf die Liste der Witze zurückleiten, anstatt die PHP -Vorlage wie zuvor anzuzeigen. Auf diese Weise können Benutzer den neu hinzugefügten Witz unter ihnen sehen. Das tun die beiden Zeilen am Ende der obigen IF -Anweisung.

Um das gewünschte Ergebnis zu erzielen, könnte Ihr erster Instinkt darin bestehen, dass der Controller die Liste der Witze aus der Datenbank nach dem Hinzufügen des neuen Witzes und der Anzeige der Liste mit den Witzen.html.php -Vorlage wie gewohnt einfach abrufen kann. Das Problem dabei ist, dass die Liste der Witze aus der Sicht des Browsers das Ergebnis des Einreichens des Formulars „Witz hinzufügen“ darstellt. Wenn der Benutzer dann die Seite aktualisiert hätte, würde der Browser dieses Formular erneut einsetzen, was zu einer weiteren Kopie des neuen Witzes zur Datenbank hinzugefügt wird! Dies ist selten das gewünschte Verhalten.

Stattdessen möchten wir, dass der Browser die aktualisierte Liste der Witze als normale Webseite behandelt, die neu geladen werden kann, ohne das Formular erneut zu versehen. Die Möglichkeit, dies zu tun, besteht darin, die Einreichung des Browser -Formulars mit einer HTTP -Weiterleitung zu beantworten - eine spezielle Antwort, die dem Browser aufweist, zu einer anderen Seite zu navigieren. (HTTP steht für Hypertext Transfer Protocol und ist die Sprache, die die Anforderungs-/Antwortkommunikation beschreibt, die zwischen dem Webbrowser des Besuchers und Ihrem Webserver ausgetauscht werden.)

Die Funktion der PHP -Header bietet die Möglichkeit, spezielle Serverantworten wie diese zu senden, indem Sie bestimmte Header in die an den Browser gesendete Antwort einfügen. Um eine Weiterleitung zu signalisieren, müssen Sie mit der URL der Seite, die Sie den Browser leiten möchten, einen Standort -Header an:

anführen.
CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In diesem Fall möchten wir den Browser an jokes.php senden. Hier sind die beiden Zeilen, die den Browser zu unserem Controller umleiten, nachdem der neue Witz zur Datenbank hinzugefügt wurde:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

unten finden Sie den vollständigen Code des addjoke.php -Controllers.

Beispiel: Mysql-addjoke

$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie dies überprüfen, um sicherzustellen, dass alles für Sie sinnvoll ist, beachten Sie, dass der Code, der mit der Datenbank verbunden ist, indem ein neues PDO -Objekt erstellt wird, vor einem der Code, in dem Datenbankabfragen ausgeführt werden, vorhanden sein muss. Eine Datenbankverbindung ist jedoch nicht erforderlich, um das Formular "Witz hinzufügen" anzuzeigen. Die Verbindung wird nur hergestellt, wenn das Formular eingereicht wurde.

Laden Sie dies auf und fügen Sie der Datenbank über Ihren Browser ein oder zwei neue Witzungen hinzu.

Da haben Sie es: Sie können vorhandene Witze anzeigen - und neue Witze zu Ihrer MySQL -Datenbank hinzufügen.

Daten aus der Datenbank

löschen

In diesem Abschnitt werden wir eine endgültige Verbesserung unserer Witzdatenbank -Site vornehmen. Neben jedem Witz auf der Seite "Witze) (jokes.php) platzieren wir eine Schaltfläche mit der Bezeichnung Löschen. Wenn Sie klicken, wird dieser Witz aus der Datenbank entfernt und die aktualisierte Witzliste angezeigt.

Wenn Sie eine Herausforderung mögen, möchten Sie vielleicht einen Stich beim Schreiben dieser Funktion selbst machen, bevor Sie weiterlesen, um meine Lösung zu sehen. Obwohl wir eine brandneue Funktion implementieren, verwenden wir hauptsächlich dieselben Tools, die in den vorherigen Beispielen in diesem Kapitel verwendet werden. Hier sind ein paar Hinweise, um Sie zu starten:

  • Sie benötigen einen neuen Controller (deletejoke.php).
  • Der Befehl SQL Delete ist erforderlich, den ich in Kapitel 3 eingeführt habe.
  • Um einen bestimmten Witz in Ihrem Controller zu löschen, müssen Sie ihn einzigartig identifizieren. Die ID -Spalte in der Witztabelle wurde erstellt, um diesen Zweck zu erfüllen. Sie müssen den ID des Witzes bestehen, um mit der Anfrage zu löschen, einen Witz zu löschen. Der einfachste Weg, dies zu tun, besteht darin, ein Feld versteckt zu verwenden.

Nehmen Sie sich zumindest ein paar Momente, um darüber nachzudenken, wie Sie sich dem nähern würden. Wenn Sie bereit sind, die Lösung zu sehen, lesen Sie weiter!

Zunächst müssen wir die Auswahl der Abfrage ändern, die die Liste der Witze aus der Datenbank abreißt. Zusätzlich zur Joketext -Spalte müssen wir auch die ID -Spalte abrufen, damit wir jeden Witz eindeutig identifizieren können:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wir müssen auch die while -Schleife ändern, die die Datenbankergebnisse in das Array von $ witze speichert. Anstatt einfach den Text eines jeden Witzes als Gegenstand im Array zu speichern, speichern wir sowohl die ID als auch den Text jedes Witzes. Eine Möglichkeit, dies zu tun

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hinweis: Wenn Sie bereits eine Foreach -Schleife verwendet haben, um Ihre Datenbankergebniszeilen zu verarbeiten, funktioniert dies auch einwandfrei:

$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Sobald diese Schleife seinen Kurs ausgeführt hat, haben wir das $ -Cokes -Array, von denen jedes Element ein assoziatives Array mit zwei Elementen ist: die ID des Witzes und seines Textes. Für jeden Witz ($ Witze [n]) können wir daher seine ID ($ Witze [n] ['id']) und seinen Text abrufen ($ Witze [n] ['Text']).

Unser nächster Schritt ist die Aktualisierung der Jokes.html.php -Vorlage, um den Text jedes Witzes aus dieser neuen Array -Struktur abzurufen und für jeden Witz eine Schaltfläche Löschen bereitzustellen:

try {
  ⋮ do something risky
}
catch (ExceptionType $e) {
  ⋮ handle the exception
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Hier sind die Highlights dieses aktualisierten Code:

  • Jeder Witz wird mit einem Formular angezeigt, das diesen Witz löscht, wenn er eingereicht wird. Wir signalisieren dies einem neuen Controller, deletejoke.php, unter Verwendung des Aktionsattributs des Formulars.
  • Da jeder Witz im Array von $ witze jetzt durch ein Zwei-Punkte-Array anstelle einer einfachen Zeichenfolge dargestellt wird, müssen wir diese Zeile aktualisieren, um den Text des Witzes abzurufen. Wir tun dies mit $ witz ['text'] anstelle von $ witz.
  • Wenn wir das Formular einreichen, um diesen Witz zu löschen, senden wir den ID des Witzes, der gelöscht werden soll. Dazu benötigen wir ein Formularfeld, das die ID des Witzes enthält, aber wir möchten es vorziehen, dieses Feld vor dem Benutzer verborgen zu halten. Deshalb verwenden wir ein Feld für verstecktes Formular (Eingabe type = "Hidden"). Der Name dieses Feldes ist eine ID, und sein Wert ist die ID des zu gelöschten Witz Ich muss mir Sorgen machen, dass es mit HTMLSpecialChars HTML-Safe macht. Wir können sicher sein, dass es sich um eine Nummer handelt, da es automatisch von MySQL für die ID -Spalte generiert wird, wenn der Witz zur Datenbank hinzugefügt wird.
  • Die Schaltfläche Senden (Eingabetyp = "Senden") gibt das Formular beim Klicken ein. Sein Wertattribut gibt es eine Beschriftung von Löschen.
  • Schließlich schließen wir die Form für diesen Witz.

Hinweis: Wenn Sie Ihre HTML kennen, denken Sie wahrscheinlich, dass die Form- und Eingabetags außerhalb des Blockquote -Elements gehören, da sie nicht Teil des zitierten Textes sind (der Witz).

streng genommen ist das wahr: Die Form und ihre Eingaben sollten wirklich entweder vor oder nach dem Blockquote sein. Leider erfordert das DIS -Display dieser Tag -Struktur eindeutig ein wenig CSS -Code (Cascading Style Sheets), der wirklich über den Rahmen dieses Buches hinausgeht.

, anstatt Ihnen CSS -Layout -Techniken in einem Buch über PHP und MySQL beizubringen, habe ich mich für dieses unvollkommene Markup entschieden. Wenn Sie diesen Code in der realen Welt verwenden möchten, sollten Sie einige Zeit in das Erlernen von CSS investieren (oder zumindest die Dienste eines CSS -Guru sichern). Auf diese Weise können Sie die vollständige Kontrolle über Ihr HTML -Markup übernehmen, ohne sich um die CSS zu kümmern, die erforderlich sind, damit es gut aussieht. Wenn Sie mehr über CSS -Layouts erfahren möchten, sehen Sie sich CSS Master, 3. Auflage , von Tiffany Brown an.

Fügen Sie die folgenden CSS zu Witzen hinzu.css, damit die Schaltflächen rechts neben den Witzen erscheinen und eine Linie zwischen ihnen zeichnen:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Das folgende Bild zeigt, wie die Witzliste mit den hinzugefügten Schaltflächen aussieht.

Anzeigen von Daten von MySQL im Web: Eine Einführung

Aber warte! Bevor wir die Schaltfläche Löscher funktionieren, treten wir kurz zurück und schauen Sie sich diese Zeile sorgfältig an:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hier werden wir über das Pdostatement -Objekt verlegt, das uns eine $ row -Variable mit der Schlüssel -ID und dem Joketext zusammen mit den entsprechenden Werten gibt, und wir verwenden das, um ein anderes Array mit denselben Schlüssel und Werten zu erstellen.

Sie haben vielleicht bereits erkannt, dass dies furchtbar ineffizient ist. Wir könnten dasselbe mit diesem Code erreichen:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Aber wie wir wissen, kann dies auch mit einem für die Eachel -Schleife erreicht werden:

new PDO('mysql:host=hostname;dbname=database', 'username',
  'password')
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In diesem Fall verwenden wir Foreach, um die Datensätze aus der Datenbank zu iterieren und ein Array zu erstellen. Wir schauen dann über das Array mit einer anderen für die Ereigungsschleife in der Vorlage. Wir konnten einfach Folgendes schreiben:

$pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
  'mypassword');
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn $ Jokes in der Vorlage iteriert wird, ist es kein Array, sondern ein Pdostatement -Objekt. Dies hat jedoch keinen Einfluss auf die Ausgabe und spart uns einen Code. Tatsächlich können wir die $ -sergebnisvariable insgesamt weglassen und das PDOSTATEMENT -Objekt direkt in die Variable $ witze laden. Der complete jokes.php Controller sieht jetzt so aus:

try {
  ⋮ do something risky
}
catch (ExceptionType $e) {
  ⋮ handle the exception
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Jetzt haben wir noch nicht einmal eine Weile, die über die Datensätze im Controller iteriert, sondern nur die Datensätze direkt in der Vorlage iterieren, etwas Code speichern und die Seite etwas schneller ausgeführt haben Aufzeichnungen einmal.

Zurück zu unserer neuen Schaltfläche Neue Löschung: Alles, was noch übrig bleibt, um diese neue Funktion zu bearbeiten, besteht darin, eine relevante Deletejoke.php hinzuzufügen, um der Datenbank eine Löschabfrage auszustellen:

try {
  $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
    ’mypassword’);
  $output = 'Database connection established.';
}
catch (PDOException $e) {
  $output = 'Unable to connect to the database server.';
}

include  __DIR__ . '/../templates/output.html.php';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Der vollständige Code für die aktualisierten jokes.php und deletejoke.php ist als Beispiel verfügbar: MySQL-Deletejoke.

Dieser Codeklopfen funktioniert genau wie der, den wir hinzugefügt haben, um den Code „Witz hinzufügen“ früher im Kapitel zu verarbeiten. Wir beginnen damit, eine Löschanfrage mit einem Platzhalter für die Witz -ID vorzubereiten, die wir löschen möchten.

Tipp: Sie könnten denken, dass eine vorbereitete Aussage in dieser Instanz unnötig ist, um unsere Datenbank vor SQL -Injektionsangriffen zu schützen, da die Witz -ID von einem für den Benutzer unsichtbaren Feld eines versteckten Formulars bereitgestellt wird. In der Tat stehen alle Formularfelder - auch verborgene - letztendlich unter der Kontrolle des Benutzers. Es gibt weit verbreitete Browser-Add-Ons, die beispielsweise versteckte Formularfelder sichtbar und für die Bearbeitung durch den Benutzer verfügbar machen. Denken Sie daran: Jeder vom Browser eingereichte Wert wird letztendlich vermutet, wenn es darum geht, die Sicherheit Ihrer Website zu schützen.

Wir binden dann den eingereichten Wert von $ _post ['id'] an diesen Platzhalter und führen die Abfrage aus. Sobald diese Abfrage erreicht ist, verwenden wir die PHP -Header -Funktion, um den Browser zu bitten, eine neue Anfrage zu senden, um die aktualisierte Liste der Witze anzuzeigen.

Hinweis: Wenn Sie dieses Beispiel selbst in Angriff genommen haben, war Ihr erster Instinkt möglicherweise darin die Seite. In der Tat wäre der Code für einen solchen Link viel einfacher:

CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Kurz gesagt, Hyperlinks sollten niemals verwendet werden, um Aktionen auszuführen (z. B. Löschen eines Witzes). Sie dürfen nur verwendet werden, um einen Link zu einigen verwandten Inhalten bereitzustellen. Gleiches gilt für Formulare mit Methode = "get", mit der nur Abfragen vorhandener Daten durchgeführt werden sollten. Aktionen dürfen immer nur als Ergebnis eines Formulars mit der Einreichung von Methode = "post" ausgeführt werden.

Der Grund dafür ist, dass Formen mit method = "post" von Browsern und verwandten Software unterschiedlich behandelt werden. Wenn Sie ein Formular mit method = "post" einreichen und dann auf die Schaltfläche Aktualisieren in Ihrem Browser klicken, fragt der Browser, ob Sie sicher sind, dass Sie das Formular erneut einsetzen möchten. Browser haben keinen ähnlichen Schutz gegen Wiederbelebung, wenn es um Links und Formulare mit method = "get" geht.

Suchmaschinen und andere Webcrawler folgen auch allen Links auf Ihrer Website, um herauszufinden, wann die Seiten Ihrer Website in den Suchergebnissen angezeigt werden sollen.

Wenn Ihre Website aufgrund eines Hyperlinks einen Witz gelöscht hat, können Sie feststellen, dass Ihre Witze gelöscht werden, wenn eine Suchmaschine Ihre Website findet.

Mission erfüllt

In diesem Kapitel haben Sie alles über PHP-Datenobjekte (PDO) gelernt, eine Sammlung integrierter PHP die Methoden, die sie bereitstellen. Während Sie dabei waren, haben Sie auch die Grundlagen der objektorientierten Programmierung (OOP) aufgegriffen-was für einen PHP-Anfänger keine leichte Leistung ist!

Verwenden von PDO-Objekten haben Sie Ihre erste datenbankgesteuerte Website erstellt, auf der die IJDB-Datenbank online veröffentlicht wurde und den Besuchern das Hinzufügen und Löschen von Witzen ermöglichte.

In gewisser Weise könnten Sie sagen, dass dieses Kapitel die angegebene Mission dieses Buches erreicht hat: Um Ihnen beizubringen, wie Sie eine datenbankgesteuerte Website erstellen. Natürlich enthielt das Beispiel in diesem Kapitel nur das nötige Wesentliche. Im Rest des Buches zeige ich Ihnen, wie Sie das Skelett ausfleischten, das Sie in diesem Kapitel aufbauen können.

In Kapitel 5 kehren wir zum SQL -Abfragefenster in MySQL Workbench zurück. Wir lernen, wie Sie relationale Datenbankprinzipien und fortgeschrittene SQL -Abfragen verwenden, um komplexere Arten von Informationen darzustellen, und geben unseren Besuchern die Witze, die sie hinzufügen!

Wir hoffen, dass Sie diesen Auszug von php & mysql: novice nach Ninja, 7. Ausgabe , genossen haben. Das vollständige Buch ist auf SitePoint Premium und in Ihrem Lieblingsbuch- und E -Book -Einzelhändler erhältlich.

FAQs zum Anzeigen von Daten von MySQL im Web

Wie kann ich mit einem Webbrowser eine Verbindung zu einer MySQL-Datenbank herstellen? PHPMYADMIN ist ein kostenloses Software -Tool, das in PHP geschrieben wurde und die Verwaltung von MySQL über das Web übernehmen soll. Um dies zu verwenden, müssen Sie es auf Ihrem Server installieren und über Ihren Webbrowser darauf zugreifen, indem Sie die IP -Adresse Ihres Servers eingeben, gefolgt von "/phpmyadmin". Sie werden aufgefordert, Ihre MySQL -Anmeldeinformationen einzugeben. Sobald Sie sich authentifiziert haben, können Sie Ihre Datenbanken direkt aus Ihrem Browser verwalten. 🎜> Mysql Shell ist ein erweiterter Client- und Code -Editor für MySQL. Es bietet Skriptfunktionen für JavaScript und Python und enthält APIs für die Arbeit mit MySQL. Sie können es verwenden, um Datenabfragen und Updates sowie verschiedene Verwaltungsvorgänge durchzuführen. MySQL -Shell kann auf Ihrem lokalen Computer installiert werden und Sie können sie mit den entsprechenden Anmeldeinformationen an Ihren MySQL -Server verbinden.

Kann ich MySQL -Daten auf meiner Website verwenden? MySQL -Daten auf Ihrer Website. Dies erfolgt normalerweise über eine serverseitige Skriptsprache wie PHP. Ihre PHP -Skripte stellen eine Verbindung zu Ihrer MySQL -Datenbank her, führen Abfragen zum Abrufen von Daten aus und zeigen diese Daten dann auf Ihrer Website an. Dies ist ein gemeinsamer Ansatz für dynamische Websites, die sich ändernde Inhalte wie ein Blog oder eine Nachrichtenseite anzeigen müssen.

Wie kann ich meine MySQL -Datenbank sichern? . Stellen Sie zunächst sicher, dass Ihr MySQL -Server in einer sicheren Umgebung mit einer Firewall und anderen geeigneten Sicherheitsmaßnahmen ausgeführt wird. Zweitens verwenden Sie starke, eindeutige Passwörter für Ihre MySQL -Konten. Drittens beschränken Sie die Privilegien Ihrer MySQL -Konten so, dass sie nur die Berechtigungen haben, die sie benötigen, um ihre Aufgaben auszuführen. Schließlich aktualisieren und entfliehen Sie Ihren MySQL-Server regelmäßig, um vor bekannten Schwachstellen zu schützen.

Wie kann ich meine MySQL-Datenbank sichern? . Dieses Tool erstellt eine SQL -Datei mit Befehlen, mit denen die Datenbank von Grund auf neu erstellt werden kann. Sie können dieses Tool aus der Befehlszeile Ihres Servers ausführen und den Namen der Datenbank angeben, die Sie sichern möchten, und den Namen der Datei, die Sie erstellen möchten.

Wie kann ich meine MySQL -Datenbank optimieren? 🎜> Optimierung Ihrer MySQL -Datenbank kann mehrere Schritte umfassen. Zunächst können Sie den Befehl optimize table verwenden, um die physische Speicherung von Tabellendaten neu zu organisieren und den Speicherplatz zu reduzieren. Zweitens können Sie den MySQL Query Optimizer verwenden, um die Effizienz Ihrer Abfragen zu verbessern. Drittens können Sie die Indexierung verwenden, um das Abrufen von Daten zu beschleunigen.

Wie kann ich Daten in meine MySQL -Datenbank importieren? Dieser Befehl liest Zeilen aus einer Textdatei mit sehr hoher Geschwindigkeit in eine Tabelle. Der Dateiname muss als wörtlicher Zeichenfolge angegeben werden.

Wie kann ich Daten aus meiner MySQL -Datenbank exportieren? Dieser Befehl schreibt das Ergebnis einer Auswahlanweisung zu einer Datei auf dem Serverhost.

Wie kann ich Daten in meiner MySQL -Datenbank aktualisieren? Befehl. Dieser Befehl ändert vorhandene Zeilen in einer Tabelle. Sie geben den Tabellennamen, die zu aktualisierende Spalte und den neuen Wert an, zusammen mit einer WHERE -Klausel, um auszuwählen, welche Zeilen aktualisiert werden sollen.

Wie kann ich Daten aus meiner MySQL -Datenbank löschen? > Sie können Daten mit dem Befehl Löschen aus Ihrer MySQL -Datenbank löschen. Dieser Befehl entfernt vorhandene Zeilen aus einer Tabelle. Sie geben den Tabellennamen und eine Where -Klausel an, um auszuwählen, welche Zeilen gelöscht werden sollen. Seien Sie vorsichtig mit diesem Befehl, da gelöschte Daten nicht wiederhergestellt werden können.

Das obige ist der detaillierte Inhalt vonAnzeigen von Daten von MySQL im Web: Eine Einführung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage