Sie sind hier: Workshops PHP-Workshop

PHP-Workshop

PHP-Workshop Teil 4

14) Zugriff auf Datenbanken

Eines der Haupteinsatzgebiete von PHP ist der Online-Zugriff auf Datenbanken.

Was ist eine Datenbank?

Vereinfacht gesagt: Eine Datenbank enthält Datensätze, die mit einer speziellen Sprache bearbeitet werden können. Zum Beispiel können bestimmte Datensätze ausgelesen werden, neue Datensätze hinzugefügt werden, Datensätze können aktualisiert oder gelöscht werden. All diese Vorgänge nennt man Abfragen.

Weit verbreitet sind sogenannte SQl-Datenbanken, d.h. Datenbanken, die mit der Sprache SQL (Abkürzung für Structured Query Language) bearbeitet werden können. PHP kann mit Datenbanken verschiedener Hersteller umgehen, besonders beliebt ist die Datenbank MySQL.

Vorteile von MySQL:
relativ schnell und kostenlos.

Um eine SQL-Abfrage mit PHP auszuführen, muß zuerst die Datenbank geöffnet werden (vergleichbar mit dem Zugriff auf eine Datei), dann wird die SQL-Befehlszeile an die Datenbank geschickt, die Antwort der Datenbank wird aufgenommen und schließlich wird die Datenbank-Verbindung wieder geschlossen.

Zuerst müssen wir uns etwas Hintergrundwissen über die SQL-Befehlszeile verschaffen:

15) SQL-Grundlagen

SQL-Datenbanken bestehen aus 1 oder mehreren sogenannten Tabellen. Jeder Datensatz der Datenbank ist genau eine Zeile in einer Tabelle.

Beispiel: Ein Kneipenführer für Bayreuth.

Die Tabelle kneipen:

ID Name Art Note Kommentar
1 Herzogkeller Biergarten 1 Sehr schöner Baumbestand
2 Glenk Biergarten 1 Gute Bratwürste
3 ... ... ... ...

Man kann nun auf eine dieser Tabellen zugreifen, aber auch Tabellen verküpfen. Wir wollen uns hier der Einfachkeit halber auf eine einzige Tabelle beschränken.

Es gibt im wesentlichen vier Abfragemöglichkeiten:

Auslesen: SELECT Einfügen: INSERT Überschreiben: UPDATE Löschen: DELETE
Will man z.B. alle kneipennamen, die sich in der Datenbank befinden, auslesen, so gibt man den SQL-Befehl

SELECT Name FROM kneipen;

ein.

Will man Name und Art der Kneipe ausgeben, so lautet der Befehl

SELECT Name,Art FROM kneipen;

Soll schließlich die ganze Zeile ausgelesen werden, so genügt der Befehl

SELECT * FROM kneipen;

Die auszulesenden Datensätze können nun noch weiter spezifiziert werden:

SELECT * FROM kneipen WHERE NOTE=1;

gibt nur die Datensätze aus, die in der Spalte Note eine 1 enthalten.

Sortiert können die Datensätze mit

SELECT * FROM kneipen WHERE NOTE=1 ORDER BY Name;

werden.

Neue Datensätze werden folgendermaßen hinzugefügt:

INSERT kneipen (Name,Art,Note,Kommentar) VALUES ('Glenk','Biergarten','1','Gute Bratwürste');

Vorhandene Datensätze können mit

UPDATE kneipen SET Note='2',Kommentar='Die Bratwürste lassen nach' WHERE ID=2;

überschrieben werden.

Das soll als erster Einblick genügen. SQL ist eine sehr mächtige Abfragesprache, insbesondere für Kombinationsabfragen aus mehreren Tabellen gleichzeitig (inner joins, outer joins,...) existiert eine eigene, beinahe mathematische Theorie.

16) SQL-Befehle mit PHP

Die obigen SQL-Befehle verwenden wir nun mit PHP. Wir wollen als Beispiel alle Datensätz aus der Tabelle kneipen in der Datenbank www2 ausgeben.

Zuerst muß eine Verbindung von PHP zum Datenbank-Server (d.h. dem Computer, auf dem die Datenbank liegt) hergestellt werden:

$verbindung = @mysql_connect("localhost","Nutzername","Passwort");

localhost bedeutet, wir verbinden uns zum gleichen Computer, auf dem sich auch der Webserver befindet.

Dies funktioniert, da in unserem Fall Webserver und Datenbank auf einem Rechner liegen. Wie man vielleicht erahnt, kann also auch auf eine Datenbank auf einem beliebigen anderen Rechner im Internet zugegriffen werden - vorausgesetzt man besitzt die entsprechende Berechtigung.
Nutzername ist ein gültiger Benutzername für diese Datenbank (dies wurde vom Datenbank-Verwalter so festgelegt).
Passwort bedeutet, dieser Benutzer benötigt ein Passwort.

Wir können überprüfen, ob die Verbindung klappt:

if (!$verbindung) { echo "Keine Verbindung möglich!\n"; exit; }

Steht die Verbindung, so können wir die Abfrage starten.

Zur besseren Übersicht schreiben wir die SQL-Abfrage in eine Variable:

$abfrage = "SELECT Name,Art from kneipen";

Diese Abfrage wird an den Datenbank-Server geschickt. Das Resultat fangen wir in der Variablen $erg auf.

$erg = mysql_db_query("www2",$abfrage,$verbindung);

Die erste Variable gibt die Datenbank an, die wir abfragen wollen. Die zweite Variable enthält den SQL-Befehl, die dritte Variable enthält die Verbindung, die mit mysql_connect geschaffen wurde. Nun kommt eine etwas kniffliger Arbeit:

Wir müssen aus $erg die zurückgelieferten Datensätze auslesen. Hätten wir einen INSERT, UPDATE oder DELETE Befehl verschickt, bräuchten wir nur testen, ob $erg wahr oder falsch ist, d.h. ob die Abfrage geklappt hat oder nicht.

Da wir aber den SELECT-Befehl an die Datenbank geschickt haben, wollen wir die von der Datenbank zurückgelieferten Datensätze auslesen.

Wir haben pro Datensatz die beiden Spalten Name und Art angefordert. Diese lesen wir nun zeilenweise aus:

list($Name,$Art) = mysql_fetch_row($erg);

Die Variable $erg enthält nach der Abfrage Zeilen mit jeweils 2 Spalten (Name und Art). mysql_fetch_row($erg) gibt genau eine Zeile aus.

Zu Beginn steht eine Art Zeiger auf der ersten Zeile, führt man den Befehl mysql_fetch_row($erg) aus, rutscht der Zeiger zur nächsten Zeile usw. Will man alle Zeilen ausgeben, empfiehlt sich eine Schleife:

while (list($Name,$Art) = mysql_fetch_row($erg))

{
echo "$Name ist ein(e) $Art<BR>\n";
}

Die Ergebnisse verarbeiten wir also zeilenweise zu HTML-Text.

Am Ende empfiehlt es sich, die Verbindung zur Datenbank zu kappen:

mysql_close($verbindung);

Dies waren nur die einfachsten MySQL-Befehle in PHP, die aber schon für sehr viele Anwendungen ausreichen. Weiterführende Befehle kann man im Handbuch nachlesen.




 Zurück zu: Workshops