MyPHP - ein Einstieg in MySQL + PHP
Inhalt:
1. MySQL
1.1. Allgemeines über Datenbanken und Tabellen
1.2. Datentypen - Was sind das für Typen?
1.3. Wie lege ich eine Datenbank mit Tabellen an? - phpMyAdmin
1.3.1. Was ist SQL überhaupt?
1.3.2. Wir legen eine Datenbank an
1.3.3. Tabellen anlegen
1.3.4. Primärschlüssel - nichts einfacher als das!
1.3.5. Die "autoincrement"-Eigenschaft - kein Problem!
2. PHP
2.1. PHP und mySQL - Wo ist die Verbindung?
2.1.1. Verbindung zum Datenbankserver und zur Datenbank
2.1.2. Wir sprechen mit der Datenbank
2.1.3. SELECT, INSERT, UPDATE - Die wahrscheinlich wichtigsten 3 SQL-Befehle
2.1.3.1 SELECT - unter der Lupe
1.1. Allgemeines über Datenbanken und Tabellen
Eine Datenbank ist nichts anderes als eine Sammlung von Tabellen. Stehen diese Tabellen zueinander in einer Beziehung, spricht man von einer relationalen Datenbank. Folgendes Beispiel soll mehr Licht dahinter bringen.
Beispiel: Nehmen wir an, eine Tabelle enthält Kundendaten (kunden_id, Name, Adresse, etc.) und eine andere Tabelle Auftragsdaten (Waren, Rechnungssumme, Datum, kunden_id etc.). Die Beziehung ergibt sich in diesem Beispiel über die kunden_id, der eindeutigen Identifizierung eines Kunden und seine Zuordnung zu einer oder mehreren Aufträgen. Man spricht hier von einer 1:n Beziehung, da jedem Auftrag genau ein Kunde umgekehrt aber mehreren Aufträgen der gleiche Kunde zugeordnet werden kann.
Eine Tabelle ist eine Ansammlung von Daten, die in einem Raster mit Zeilen und Spalten organisiert ist - und sonst nichts. Man könnte auch sagen 2-dimensionale Matrix, aber wir wollen am Teppich bleiben. Eine Feinheit dürfen wir nicht übersehen - die Datentypen müssen in ein und derselben Spalte die gleichen sein. Was heißt das schon wieder?!
1.2. Datentypen - Was sind das für Typen?
Jeder Eintrag in eine Tabelle hat unweigerlich eine bestimmte Eigenschaft wie zB.
Ganzzahlig numerisch (pos. oder neg. Zahl ohne Komma) zB.:12 oder -23 - mysql-Bezeichnung:
int
Zeichenkette mit Länge 15 zB.: "fred die qualle" - mysql-Bezeichnung: varchar
oder text
Fließkommazahl (pos. oder neg. Zahl mit Nachkommastellen) zB.: 12.34 - mysql-Bezeichnung:
float
Beim Anlegen einer Tabelle muss also definiert werden, welche Datentypen in den einzelnen Spalten vorkommen. Die Spalten werden übrigens von Leuten dieser Branch "Felder" genannt, darum halten wir uns von nun an auch daran.
1.3. Wie lege ich eine Datenbank mit Tabellen an? - phpMyAdmin
PhpMyAdmin ist ein Webinterface also eine Website, die es ermöglicht mySQL Datenbanken zu verwalten. Wie das im Detail geht werden wir vorerst nicht behandeln. Mittels phpMyAdmin kann man Datenbanken anlegen, löschen, Tabellen anlegen, löschen, ändern und Daten eingeben, löschen, ändern - kurz alles was nötig ist. Im Hintergrund erfolgt alles über SQL-Befehle.
SQL (Structured Query Language) ist eine standardisierte Sprache, um Datenbanken zu verwalten. Das hat noch nichts mit mySQL zu tun. MySQL ist ein spezieller Datenbankserver, also eine Software, die Datenbanken verwaltet. Hier kommt SQL ins Spiel, denn mit SQL-Befehlen können Datenbanken vollständig manipuliert werden. PhpMyAdmin erledigt das für uns.
1.3.2. Wir legen eine Datenbank an
Wenn wir zum Beispiel eine neue Datenbank anlegen wollen, die "fred" heißt, schreiben wir den Namen in das entsprechende Feld in phpMyAdmin und klicken neue "Datenbank anlegen" in phpMyAdmin. Im Hintergrund formuliert phpMyAdmin das in etwa so: Create Database 'fred'.
Datenbanken bestehen im wesentlichen aus Tabellen. Um eine Tabelle anzulegen, müssen wir uns im Klaren sein, aus wievielen Felder (=Spalten - zum letzten Mal) die Tabelle bestehen soll und welche Datentypen wir benötigen. Wir geben dem Ding einen Namen, wählen die Anzahl der erforderlichen Felder und klicken "neue Tabelle" oder so. Keine Angst alles läßt sich nachträglich wieder ändern.
Jetzt geben wir jedem Feld einen Namen und wählen den gewünschten Datentyp. Weiters kann man einen Default-Wert angeben. Das ist der Wert der eingefügt wird, wenn nichts angegeben wird.
Mit Klick auf "ok" oder wie der Link dann heißt wird die Tabelle angelegt. PhpMyAdmin formuliert das für uns in SQL etwa so: CREATE TABLE 'name' (feld1 int, feld2 varchar...)
TIPP: Ich empfehle, nur kleinbuchstaben, keine Umlaute und keine Leerzeichen zu verwenden, dann kann nichts schiefgehen und man braucht sich nicht soviel merken. Ausserdem ist es empfehlenswert, Felder mit unterschiedlichen Inhalten nie gleich zu benennen. In ein und derselben Datenbank geht das sowieso nicht, aber bei unterschiedlichen Tabellen schon und das kann später zu bösen Verwechslungen führen (zB. id für statt kunden_id in Kundentabelle und id statt auftrags_id in Auftragstabelle).
1.3.4. Primärschlüssel - nichts einfacher als das!
Primärschlüssel, klingt kompliziert - ist es aber nicht. Es ist lediglich eine Eigenschaft eines Felds, die aussagt, dass es keinen anderen Tabelleneintrag (also eine Zeile in unserer Tabelle) mit demselben Wert geben darf.
Hier scheint mir ein Beispiel angebracht. Wir stellen uns eine Tabelle mit Kundendaten vor: Felder: name (varchar), strasse (varchar), usw. Damit wir nun die Kunden unterscheiden können brauchen wir ein Feld, das für jeden Kunden eindeutig ist. "Name" oder "Strasse" sind nicht geeignet - oder? Wir fügen also ein Feld hinzu, nennen es zB kunden_id, lassen es ein int (ganzzahliger Typ) sein und machen diese Feld zum Primärschlüssel dieser Tabelle. In phpMyAdmin ist das trivial - die Links drängen sich quasi auf.
Zum einen wird damit verhindert, dass 2 mal dieselbe kunden_id eingefügt wird (mySQL würde aufschreien und sich wehren) und zum anderen beschleunigt ein Primärschlüssel das Suchen in Tabellen.
1.3.5. Die "autoincrement"-Eigenschaft - kein Problem!
Damit wir nicht bei jedem neuen Eintrag prüfen müssen, ob es schon einen Kunden mit dieser kunden_id gibt, kommt uns die "autoincrement"-Eigenschaft zu Hilfe. Geben wir einem Feld diese Eigenschaft, so wird beim nächsten Eintrag automatisch ein Wert gewählt, der um 1 höher ist als der letzte Eintrag. Wir brauchen diesen Wert also gar nicht erst vorgeben, mySQL übernimmt das für uns.
Ein Primärschlüssel mit "autoincremement" Eigenschaft ist somit äußerst nützlich und sinnvoll. Mit phpMyAdmin sind wir nun in der Lage eine Datenbank mit Tabellen zu erstellen und Daten einzufügen, ändern oder löschen. Über letzteres haben wir uns zwar noch nicht unterhalten, aber das ist Dank phpMyAdmin nicht nötig weil selbsterklärend und kinderleicht. Das ist ja ganz nett, aber eigentlich wollen wir unsere Datenbank mit unsere eigenen Website verwalten. Hier kommt PHP ins Spiel.
PHP heißt sowas wie Hypertext Preprozessor, frei übersetzt ist damit gemeint, dass Html durch Vorverarbeitung dynamisch generiert wird. Das heißt unser Webserver ließt eine Webseite nicht nur aus seinem Filesystem aus und schickt sie 1:1 an den Client, wie er es mit normalen Html-Seiten macht, sondern er verarbeitet sie vorher. Der Webserver sucht die Seite bevor er sie zum Client schickt nach PHP-Befehlen ab und führt diese aus. Erst danach geht's ab zum Client - also dem Webbrowser des Besuchers unserer Site.
Jedes Zeichen zwischen <?php und ?> interpretiert der Webserver als PHP-Code und versucht es auszuführen. PHP-Code kann an beliebigen Stellen in der html-Datei plaziert werden. Wenn zwischen <?php und ?> Mist steht, wird eine Fehlermeldung ausgegeben. Das Ergebnis des PHP-Codes wird danach dort in den HTML-Code eingefügt, wo zuvor der PHP-Code war. Ein kleines Beispiel:
<HTML><BODY>Hier ist html
<?php
echo "<b> und hier auch</b>";
?>
</BODY></HTML>
Das Ergebnis müßte in etwa so ausschauen: Hier ist html und hier auch
Der PHP-Befehl "echo" gibt einfach die danach folgende Zeichenkette aus. Wenn wir uns den Quellcode ansehen, ist PHP natürlich nicht zu finden, denn Webserver hat bereits den PHP-Code ausgeführt und nur das Ergebnis also: <b>und hier auch</b> anstelle des PHP-Codes geschickt.
Wir werden hier nicht alle PHP-Befehle durchgehen, denn dafür gibt's genug Hilfe im Web (zB http://www.php.net). Am Ende eines jeden PHP-Befehles muss ein ; sein und Variablen beginnen immer mit $, soviel sei vorerst gesagt.
2.1. PHP und mySQL - Wo ist die Verbindung?
PHP unterstützt, SQL-Befehle an einen mySQL-Datenbankserver zu schicken. Damit ist eigentlich schon alles gesagt. Wir sind also in der Lage, mit einer Webseite alles nur Erdenkliche mit unseren Datenbanken und Tabellen anzustellen. phpMyAdmin macht genau dasselbe. Um eine Datenbank bzw. deren Tabellen manipulieren zu können, müssen wir uns zuerst mit ihr verbinden.
2.1.1. Verbindung zum Datenbankserver und zur Datenbank
Zuerst verbinden wir uns mit dem MySQL-Datenbankserver mittels : $link = mysql_connect("servername","benutzernamer","passwort"); Danach wählen wir eine Datenbank aus. $db_select = mysql_select_db("db_name",$link); und weil HTML ein Verbindungsloses Protokoll ist, müssen wir das am Beginn jeder Seite machen, in der wir unsere Datenbankverbindung benötigen.
2.1.2. Wir sprechen mit der Datenbank - mysql_query
mysql_query ist der Befehl zum Senden eines SQL-Befehls an den Datenbankserver. Die Syntax lautet: mysql_query("hier sollte unser SQL-Befehlt stehen", $db_select). $db_select ist eine Variable, die einen Zeiger auf die Datenbank darstellt, mit der wir uns weiter oben verbunden haben. Sie könnte auch $fred heißen. Wenn wir $db_select weglassen, wird die aktuelle Verbindung zur Datenbank verwendet. In Zukunft lassen wir das daher weg.
2.1.3. SELECT, INSERT, UPDATE - Die wahrscheinlich wichtigsten 3 SQL-Befehle
SELECT wählt Daten (Zeilen und Spalten) aus einer oder mehrerer Tabellen aus.
INSERT fügt neue Datensätze in eine Tabelle ein.
UPDATE ändert bestehende Inhalte einer Tabelle.
2.1.3.1 SELECT - unter der Lupe
Die Syntax lautet im einfachsten Fall: SELECT Felder FROM Tabellenname
Felder ist eine Aufzählung von Spalten, die ausgewählt werden sollen. Und wieder bemühen wir unser Beispiel der Kundentabelle mit Namen tbl_kunden, bestehend aus 3 Felder (kunden_id - int,autoincrement,primärschlüssel, kunden_name - varchar(64), kunden_ort - varchar(50)) mit folgendem Inhalt:
Kundentabelle: tbl_kunden
Beispiel: SELECT kunden_id, kunden_name FROM tbl_kunden
|
In php-formuliert: <head><title>Tabellenausgabe</title></head> |
Erläuterung zum php-Code: Zuerst verbinden wir uns mit dem Datenbankserver und der Datenbank. mysql_connect und mysql_select_db geben zurück, ob der Befehl erfolgreich ausgeführt werden konnte. Das Zeichen ! bedeutet "nicht". Der Befehl "die" (stirb) bricht das Ausführen des PHP-Codes sofort ab und gibt den Text in Klammer zurück.
if (!mysql......) die ("Fehler!"); -> Wenn der Befehl nicht erfolgreich war, schreib "Fehler!" und brich alles andere ab!
$tmp = mysql_query("SELECT.....") speichert das Ergebnis von SELECT - eine Tabelle - in $tmp ab.
Um einzelne Zeilen aus dem Ergebnis $tmp abzufragen, verwenden wir "mysql_fetch_array($tmp)". mysql_fetch_array gibt eine Zeile aus $tmp zurück und stellt den internen Zeiger auf die nächste Zeile. Steht der interne Zeiger am Ende, so kann nichts zurückgegeben werden und die Zuweisung: $kunde = mysql_fetch_array geht schief, wodurch die while-Schleife abgebrochen wird.
SELECT ermöglicht, die Auswahl einzuschränken mit WHERE bzw. zu sortieren mit ORDER BY. Folgende Beispiele sollen das verdeutlichen:
SELECT kunden_id, kunden_name WHERE kunden_id = 3 // nur Kunde mit kunden_id
= 3
SELECT kunden_id, kunden_name ODER BY kunden_name // Alle Kunden alphabetisch
sortiert nach kunden_name
SELECT kunden_name WHERE kunden_id > 2 ORDER BY kunden_name // man kann auch
nach Felder sortieren, die nicht ausgewählt werden.
SELECT kunden_id WHERE (kunden_name != "" AND kunden_id < 3) // Kombinierte WHERE-Bedingung; != bedeutet ungleich