| <- Vorlesung 3 | Übungen | Vorlesung 5 -> |
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:
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:
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.
$verbindung = @mysql_connect("localhost","nobody","");
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.
if (!$verbindung) {
echo "Keine Verbindung möglich!\n";
exit;
}
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.
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.
mysql_close($verbindung);
| <- Vorlesung 3 | Übungen | Vorlesung 5 -> |