5.6 MySQL-Grundlagen
Da PHP und die Template Engine TinyButStrong erst dann richtig Sinn machen, wenn es auch um dynamische Inhalte geht, möchte ich Ihnen in diesem Kapitel die Grundlagen von Datenbanken am Beispiel von MySQL näher bringen.
Eine Datenbank ist eine Sammlung von einer oder in der Regel mehreren Tabellen, in denen konkrete Daten gespeichert werden können. Der Aufbau einer Tabelle ist mit dem einer Excel-Tabelle vergleichbar, in der pro Zeile ein Datensatz gespeichert wird.
Zunächst zeige ich Ihnen im folgenden Abschnitt, wie Sie sich eine Datenbank ganz leicht über eine Webanwendung anlegen können.
Über phpMyAdmin haben Sie die Möglichkeit, MySQL-Datenbanken über einen Browser anzulegen und zu administrieren, ohne dass Sie dafür MySQL-Kenntnisse benötigen. Dabei sollte Ihnen bewusst sein, dass Sie all die Veränderungen, die Sie an Ihrer Datenbank vornehmen auch direkt über MySQL machen könnten.
Zunächst möchte ich Ihnen zeigen, wie Sie eine Datenbank anlegen können. Tragen Sie dazu einen beliebigen Datenbanknamen auf der Startseite von phpMyAdmin unter Neue Datenbank anlegen ein und klicken Sie anschließend auf Anlegen. Ich habe die Datenbank webdesign-tutorial genannt (siehe Abbildung 1).
Eine Datenbank ist eine Sammlung von einer oder in der Regel mehreren Tabellen, in denen konkrete Daten gespeichert werden können. Der Aufbau einer Tabelle ist mit dem einer Excel-Tabelle vergleichbar, in der pro Zeile ein Datensatz gespeichert wird.
Zunächst zeige ich Ihnen im folgenden Abschnitt, wie Sie sich eine Datenbank ganz leicht über eine Webanwendung anlegen können.
phpMyAdmin
Starten Sie zunächst im XAMPP Control Panel den Apache und MySQL. Anschließend ist phpMyAdmin über die folgende URL erreichbar: http://localhost/phpmyadmin/Über phpMyAdmin haben Sie die Möglichkeit, MySQL-Datenbanken über einen Browser anzulegen und zu administrieren, ohne dass Sie dafür MySQL-Kenntnisse benötigen. Dabei sollte Ihnen bewusst sein, dass Sie all die Veränderungen, die Sie an Ihrer Datenbank vornehmen auch direkt über MySQL machen könnten.
Zunächst möchte ich Ihnen zeigen, wie Sie eine Datenbank anlegen können. Tragen Sie dazu einen beliebigen Datenbanknamen auf der Startseite von phpMyAdmin unter Neue Datenbank anlegen ein und klicken Sie anschließend auf Anlegen. Ich habe die Datenbank webdesign-tutorial genannt (siehe Abbildung 1).

Nachdem Sie die Datenbank angelegt haben, können Sie diese über das Kontextmenü auf der linken Seite auswählen. Abbildung 2 zeigt, wie Sie darin eine neue Tabelle anlegen können. In dieser Tabelle sollen Besucher der Webseite Verbesserungsvorschläge bzw. Fehler melden können. Um das Beispiel möglichst einfach zu halten, soll dafür zunächst nur die Eingabe einer E-Mail-Adresse und eines Freitextes möglich sein. Ich gebe der Tabelle den Namen reports und wähle als Initialwert eine Anzahl von 3 Feldern bzw. Spalten. Selbstverständlich können Sie der Tabelle zu einem späteren Zeitpunkt noch weitere Felder hinzufügen oder bestehende Felder verändern.
Abbildung 2Beim Anlegen einer neuen Tabelle definieren Sie zunächst den Namen und die Anzahl der Felder bzw. Spalten.

Abschließend müssen Sie den Feldern jeweils einen Namen und einen Datentyp zuordnen. Abbildung 3 zeigt die Einstellungen, für die ich mich entschieden habe. In Spalte 1 definiere ich eine id, der ich den Datentyp INT (engl. integer: ganze Zahl) zuweise. Als Attribut verwende ich die Einstellung UNSIGNED (zu dt. vorzeichenlos), da eine Id nicht negativ werden soll. Für das Attribut Index wähle ich die Option PRIMARY. Dies bedeutet, dass der Wert in der Spalte id ein Schlüsselwert ist und somit jeweils nur einmalig in der Tabelle vorkommen darf. Die Einstellung AUTO_INCREMENT sorgt dafür, dass jede neu angelegte Zeile in der Tabelle automatisch eine einzigartige Id erhält, indem die Zahl jeweils um 1 erhöht wird. In Spalte 2 lege ich ein Feld für das Speichern einer E-Mail-Adresse an. Da es sich dabei um ein Textfeld handelt, wähle ich den Datentyp VARCHAR (engl. character varying: unterschiedliche Buchstaben) mit einer Länge von 255 Zeichen. Die letzte Spalte soll einen längeren Text speichern können und erhält daher den Typ TEXT mit einer Maximallänge von 65.535 Zeichen. Im Gegensatz zum Datentyp VARCHAR muss hier keine Längenbeschränkung eingetragen werden.
Klicken Sie auf Speichern um die Tabelle anzulegen.

Die angelegte Tabelle erscheint nun ebenfalls im Kontextmenü auf der linken Seite von phpMyAdmin. Für den Anfang soll diese Tabelle reichen, so dass ich Ihnen im folgenden Abschnitt die Syntax von MySQL näher bringen kann.
MySQL - Grundbefehle
Nachdem Sie eine Tabelle in Ihrer MySQL-Datenbank angelegt haben möchte ich Ihnen zeigen, wie Sie darauf zugreifen können. Dazu möchte ich vorwiegend auf die 4 häufigsten Operationen eingehen: Lesen, schreiben, aktualisieren und löschen. Jede dieser Anfragen (im Engl. als query bezeichnet) wird über die Datenbanksprache SQL (engl. Structured Query Language: Strukturierte Abfragesprache) ausgeführt. Um die Begriffe nochmals zusammenzufassen: MySQL ist die Datenbank und SQL die dafür verwendete Abfragesprache.Lesen
Um aus einer Tabelle lesen zu können, sollte diese natürlich im Optimalfall bereits Daten enthalten. Wie einfach das Abfragen von Daten mit SQL ist zeigt Quellcode 1. Bei jeder der Zeilen handelt es sich um eine neue Anfrage.- SELECT * FROM reports
- SELECT id, email, content FROM reports
- SELECT email FROM reports WHERE id=1
Die Anfragen in Zeile 1 und 2 liefern exakt das gleiche Ergebnis: alle Spalten und Zeilen der Tabelle reports. Dazu können Sie die Spalten einzeln angeben oder mit einem * alle selektieren.
In Zeile 3 wird die Anfrage weiter eingegrenzt: zeige die Spalte email, in der die id gleich 1 ist. Da es sich bei der Spalte id um einen Schlüsselwert handelt, kommt der Wert 1 lediglich einmal vor und somit erhalten Sie genau eine E-Mail-Adresse.
Einfügen
Wie Sie via SQL Datensätze einfügen können zeigt Quellcode 2. Dabei wird der Tabelle immer jeweils eine Zeile hinzugefügt.- INSERT INTO reports (email, content) VALUES ('xyz@xyz.de', 'Anfrage zum Webdesign-Tutorial')
In die Tabelle reports werden in den Spalten email und text die Werte xyz@xyz.de und Anfrage zum Webdesign-Tutorial eingefügt. Das Feld id sollte nicht gesetzt werden, da dieses bereits automatisch aufgrund der Option AUTO_INCREMENT von der Datenbank gesetzt wird.
Ändern
Bereits vorhandene Datensätze in Ihrer Datenbank können Sie selbstverständlich auch ändern. Quellcode 3 zeigt Ihnen ein einfaches Beispiel dazu.- UPDATE reports SET email='abc@xyz.de', content='Frage zum Webdesign-Tutorial' WHERE id=5
Die E-Mail-Adresse, als auch der Text in der content-Spalte wird für den Datensatz mit der id gleich 5 geändert. Existiert die id nicht, so erfolgt keine Änderung. Kommt die E-Mail-Adresse xyz@xyz.de mehrfach in Ihrer Tabelle vor und Sie möchten alle Werte aktualisieren, so können Sie etwa eine Anfrage wie in Quellcode 4 verwenden. Seien Sie jedoch vorsichtig mit solchen Anfragen, da Sie sich eventuell alle Inhalte Ihrer Tabelle ungewollt überschreiben.
- UPDATE reports SET email='abc@xyz.de' WHERE email='xyz@xyz.de'
Löschen
Für den Löschvorgang ist das Feld id besonders wichtig, da Sie in der Regel meist nur einen bestimmten Datensatz löschen möchten. Sicherlich können Sie auch festlegen, dass eine E-Mail-Adresse lediglich einmalig in der Tabelle vorkommen darf, ist dies aber nicht der Fall, so haben Sie außer über die id keinerlei Möglichkeit zu definieren, welcher Datensatz gezielt gelöscht werden soll. Quellcode 5 zeigt ein Beispiel für eine Löschoperation mit SQL.- DELETE FROM reports WHERE id=5 LIMIT 1
Der Datensatz mit der id gleich 5 wird aus der Tabelle reports gelöscht. Beim Löschvorgang wird immer eine Zeile vollständig gelöscht. Wollen Sie lediglich einen Wert einer Zeile löschen, so können Sie diesen über eine Änderungs-Operation leeren.
Bei Lösch- oder oftmals auch bei Änderungs-Operationen lohnt es sich zudem den Befehl LIMIT zu verwenden um die Anzahl der betroffenen Zeilen zu beschränken. In diesem Beispiel ist die id einzigartig, so dass in der Regel nicht mehrere Zeilen gelöscht werden können. Dennoch empfiehlt es sich aus Sicherheitsgründen, das Limit auf 1 zu setzen, wenn lediglich eine Zeile gelöscht werden soll.