Wir haben schon zuvor mit Hilfe von Dateien Daten gespeichert. Diese Speichermethode haben wir verwendet, da alle Daten in PHP nachdem die Webseite übertragen wird, verloren gehen, d.h. nicht im Speicher bleiben. Die Möglichkeit von Dateizugriffen gibt uns die Fähigkeit Daten die Benutzer auf der Seite eingegeben haben und sei es ein simpler Counter für nachfolgende Benutzer zu sichern und wiederholt zu präsentieren.
Allerdings sind diese Möglichkeiten sehr beschränkt. Dies wir deutlich, wenn wir ein wenig mehr Daten zu speichern haben. Wir benötigen eine Menge an Dateien. Vielleicht müssen wir Datensätze wie zum Beispiel ein Adressatz bestehend aus Name, Vorname und Emailadresse verwalten und diese umständlich in den Dateien trennen und später parsen. Vielleicht ist auch eine Suche in Dateien von nöten, welche bei großen Dateien schlecht funktioniert. Zuletzt sei darauf hingewiesen, dass wir die Dateien auch immer entsprechend sperren müssen, um die wichtigen in ihnen Daten nicht durch einen parallelen Lese/Schreib-Zugriff zu verlieren.
All dies schreit nach einer neuen Methode Daten abspeichern zu können. Diese Methode ist mit der Einführung einer Datenbank gegeben.
Streng genommen verbinden wir PHP nicht mit einer Datenbank, sondern mit einem Datenbankmanagmentsystem (kurz: DBMS) welches auf einer oder mehreren Datenbanken operiert und deren Daten zur Verfügung steht. Erinnern wir uns an unser Client/Server-Prinzip, welches wir ganz zu Beginn eingeführt hatten. Nun wird die PHP-Engine selbst zu einem Client, der sich an einen Datenbankserver wendet, um von diesem Daten zu bekommen oder in diesen Daten abspeichern zu können.

Der Ablauf sieht nun wie folgt aus: Der Browser sendet etwas an den Webserver, welcher seine PHP-Engine konsultiert (dieser Schritt ist hier nicht abgebildet). In dem PHP-Programm, welches aufgerufen wird, findet ein Datenbankzugriff statt. Die PHP-Engine sendet nun einen SQL-Befehl zum Datenbankserver. Das Datenbankmanagmentsystem verwaltet den Zugriff auf die Datenbank und führt den SQL-Befehl auf der jeweiligen Datenbank aus und sendet das Ergebnis der Anfrage wieder zurück. Das PHP-Programm in der PHP-Engine wertet das Ergebnis der Anfrage aus und sendet eine HTML-Seite zurück an den Browser.
Dazu ist zu sagen, dass nicht zwingend der Datenbankserver auf einem physikalisch anderem Server läuft. Es gibt viele Webhoster, bei denen Webserver und Datenbankserver derselbe Server ist und dementsprechend der Server mit localhost angesprochen werden kann.
SQL ist eine Datenbankabfragesprache. Mit Hilfe von SQL lassen sich Fragen an eine Datenbank stellen. Diese liefert dann Antworten zurück. Mit PHP wird meistens MySQL als Datenbankserver eingesetzt. MySQL ist eine kostenlose Datenbanksystemimplementation, welche als Open Source verfügbar ist. PHP liefert alle entsprechenden Befehle mit, so dass auf Datenbanken unter MySQL einfach zugegriffen werden kann.
MySQL gehört zu den relationalen Datenbanken. Das bedeutet, dass in dieser Datenbank Informationen in Form von Relationen abgespeichert werden. Diese Relationen bestehen aus Tabellen. Eine Datenbank hat man sich so vorzustellen, dass sie aus einer Vielzahl an Tabellen besteht, welche über mehrere Spalten verfügen und viele Zeilen haben. Jede Zeile einer Tabelle ist ein Datensatz.
Da Tabellen mitunter ziemlich groß werden können, benötigt es eine lange Zeit, um sie Stück für Stück zu durchsuchen. Um dieses Problem zu lösen sind Indexe erfunden worden. Einzelne Spalten einer Tabelle werden in einen Index aufgeführt. Das Suchen nach bestimmten Werten in diesen Spalten geht dann ganz besonders schnell von statten. Allerdings ist auch Vorsicht geboten, nicht zu viele Spalten als Index zu definieren. Indexe müssen nämlich bei jedem Update der Tabelle neu aktualisiert werden und verbrauchen auch Speicherplatz.
Das relationale Datenmodell erlaubt es einzelne Tabellen zu verknüpfen und daraus virtuelle Tabellen zu erstellen, die nur für eine Abfrage existieren. Meistens wird hier ein Attribut einer Tabelle (also eine Spalte) genommen und mit einem anderen Attribut einer anderen Tabelle gleich gesetzt. So ist es zum Beispiel möglich, eine Tabelle zu haben, die Kundennummer und Kundendaten enthält, während eine andere Tabelle existiert, die alle Rechnungen enthält. In jeder Rechnung ist nun gespeichert, welche Kundenummer diese zugeordnet ist. Mit Hilfe der Gleichheit der Kundennummer lassen sich beide Tabellen verquicken.
Bevor wir uns nun darauf stürzen, wie wir mit PHP die Datenbank benutzen, möchte ich zunächst ein Tool vorstellen, mit welchem sich die Datenbank durchblättern läßt. Das Tool heißt phpMyAdmin und ist selbst in PHP geschrieben und ermöglicht es uns, die einzelnen Datenbanken und darin enthaltenen Daten quasi zu sehen:

Ich habe oben den Screenshot aus XAMPP heraus gemacht. Generell können die Farben auch komplett anderes sein. Auch die Funktionalität kann öfters verschieden sein. Schau einfach mal bei Deinem Webprovider nach. Wahrscheinlich ist dieses Tool schon vorinstalliert, wenn es eine Datenbank gibt. Wenn Du nicht sicher bist, kannst Du einmal eine Email an den Support Deines Providers schreiben. Falls die Software nicht installiert ist, kann man sie sich selbst auch einfach nachinstallieren. Schaue hierfür unter http://www.phpmyadmin.net nach.
Der Aufbau einer Verbindung zu einer Datenbank geht immer wie folgt von statten:
- Aufbau der Verbindung zum Datenbankserver.
- Übermittlung von Benutzernamen und Paßwort, mit welchem sich am Server angemeldet wird.
- Selektieren der gewünschten Datenbank.
In PHP sieht dies wie folgt aus:
<?php $DATABASEHOST = ‘localhost’; // unser Datenbankserver ist beispielsweise lokal $DATABASEUSER = ‘benutzer’; $DATABASEPASSWORD = ‘passwort’; $DATABASENAME = ‘demodatenbank’; $mydatabase = mysql_connect($DATABASEHOST, $DATABASEUSER, $DATABASEPASSWORD); mysql_select_db($DATABASENAME, $mydatabase); ?>
Beim Beenden des PHP-Skripts oder bei Aufruf von mysql_close ($mydatabase); wird die Verbindung zur Datenbank wieder getrennt und die entsprechenden Resourcen freigegeben.
SQL ist eine eigene Sprache mit vielen Funktionalitäten. Ich möchte hier nur die Basisfunktionalität erklären. Generell wird immer eine Anfrage zum Datenbankserver gesandt. Eine Tabelle wird zurückgesandt. Diese Tabelle kann mitunter leer sein.
Um Daten aus der Datenbank abzufragen wird das SELECT-Kommando benutzt:
SELECT spalte1, spalte2 FROM tabelle WHERE spalte1='wichtig'
Dieses SELECT-Kommando selektiert aus der Tabelle tabelle die Spalten 1 und 2 wobei es nur die Zeilen ausgibt, in welchen spalte1=’wichtig’ ist. Die Spaltennamen kann man mit einem Stern ( * ) ersetzen, falls man alle Spalten der Tabelle ausgegeben haben möchte.
Anstatt nur einer Tabelle kann man auch aus mehreren Tabellen selektieren. Hier kann es mitunter vorkommen, dass in mehreren Tabellen Spalten mit dem gleichen Spaltennamen vorkommen. Mit Hilfe der Notation tabellenname.spaltenname kann man hier differenzieren. Mit Hilfe des WHERE-Statements kann man festlegen, welche Zeilen nun ausgegeben werden sollen, um zum Beispiel eine Verknüpfung von zwei Tabellen zu implementieren.
SELECT * FROM tabelle1,tabelle2 WHERE tabelle1.kundennummer = tabelle2.kundennummer
Mit Hilfe von INSERT lassen sich neue Zeilen in die Tabelle einfügen
INSERT tabelle VALUES ('in Spalte1','in Spalte2')
Mit Hilfe von UPDATE lassen sich existierende Zeilen einer Tabelle ändern
UPDATE tabelle SET spalte2= "erledigen" WHERE spalte1="wichtig"
Mit Hilfe von DELETE lassen sich Zeilen löschen
DELETE tabelle WHERE spalte1="unwichtig"
Wichtig ist dabei, dass UPDATE und DELETE-Kommandos auch mehrere Zeilen löschen können. Hier gibt man also als WHERE-Statement am besten den Schlüssel der jeweiligen Zeile an, die man löschen möchte.
Nachdem man eine Verbindung mit dem Datenbankserver aufgebaut hat und auch die entsprechende Datenbank selektiert hat, können wir nun auch über PHP auf die Datenbank zugreifen. Dies geschieht mit dem Kommando mysql_query. Danach kann kann man mit beispielsweise mit mysql_fetch_assoc Zeile für Zeile das Ergebnis abfragen. Mit mysql_num_rows kann man abfragen, wieviele Zeilen in der Ausgabe vorhanden sind. Ganz zum Ende sollte man mit mysql_free_result die Resourcen wieder freigeben.
<?php $DATABASEHOST = ‘localhost’; // unser Datenbankserver ist beispielsweise lokal $DATABASEUSER = ‘benutzer’; $DATABASEPASSWORD = ‘passwort’; $DATABASENAME = ‘demodatenbank’; $mydatabase = mysql_connect($DATABASEHOST, $DATABASEUSER, $DATABASEPASSWORD); mysql_select_db($DATABASENAME, $mydatabase); $ergebnis = mysql_query(‘SELECT * FROM tabelle WHERE spalte1=”wichtig”‘); for ($i=0; $i < mysql_num_rows ($ergebnis); $i++) { $assoc = mysql_fetch_assoc($ergebnis); echo ($assoc["spalte1"].‘ ’.$assoc["spalte2"].” “); } mysql_free_result($ergebnis); ?>
