Einstieg in MySQL Zurück zur Übersicht
Über den Autor
Hallo und willkommen bei meinem Tutorial zum Thema PHP und MySQL.
Inhaltsübersicht
1. Wieso MySQL statt Txt-Dateien?
2. Verbindung zur Datenbank herstellen
3. Erstellen einer Database
4. Löschen einer Database
5. Erstellen einer Tabelle
6. Bearbeiten einer Tabelle
7. Löschen einer Tabelle
8. Einfügen eines Datensatzes
9. Auslesen eines Datensatzes
10. Bearbeiten eines Datensatzes
11. Löschen eines Datensatzes
1. Wieso MySQL statt Txt-Dateien?
- MySQL hat den Vorteil, dass es mit Zeilen und Spalten arbeitet, bei Dateien hingegen kann man höchstens auf Zeilen zugreifen
- MySQL ist sicherer als eine Datei, da ein potentieller Angreifer die Datei einfach downloaden und deren Inhalt auselsen könnte, falls sie ganz ungeschützt sein sollte.
- Das Auslesen aus einer MySQL-Datenbank ist einfacher und schneller als aus Dateien. Man kann direkt auf einzelne Zellen zugreifen. Das wäre mit Txt-Dateien nicht möglich, da man bei diesen die gesamte Zeile auslesen und die stelle rausfiltern müsste.
- Eine Tabelle in einer Datenbank kann einfach durchgesucht werden nach bestimmten Werten / Bedingungen, was bei Dateien nicht möglich ist.
2. Verbindung zur Datenbank herstellen
Um auf eine MySQL-Datenbank zugreiffen zu können, muss man vorher eine Verbindung zu dieser erstellen. Dafür gibt es in PHP folgenden Befehl: mysql_connect("host", "username", "passwort"
Zum Schließen der Verbindung benutzt man diesen: mysql_close([con_id])
Die con_id kann man aus der Verbindung mit mysql_connect() in einer Variable speichern und sie später an die Funktion mysql_close() übermitteln.
Zum Auswählen einer Database benutzt man den Befehl mysql_select_db("database"
In PHP würde das dann so aussehen:
PHP-Code:
// Hier kommt der Code hin
Manchmal kann es vorkommen, dass eine Verbindung zur Datenbank aus technischen oder sonstigen Gründen nicht aufgebaut werden kann. Statt den Besucher lauter MySQL-Fehler auszusetzen, kann man einfach mit einer If-Abfrage prüfen, ob die Verbindung geklappt hat und wenn sie eben nicht Aufgebaut werden konnte, kann man eine eigene Fehlermeldung ausgeben und den Besucher darauf hinweisen, dass er es später nochmals versuchen soll.
Das würde dann so aussehen:
PHP-Code:
{ // Verbindung wurde aufgebaut // Hier kommt der Code hin } else { // Verbindung konnte nicht hergestellt werden echo("Aus technischen Gründen konnte keine Verbindung zur Datenbank hergestellt werden. Versuchen Sie es bitte zu einem späteren Zeitpunkt nochmals. n"); // Wenn man will, kann man noch ausgeben, welcher Fehler aufgetreten ist: n"); n"); }
Die Funktion mysql_error([con_id]) gibt dabei die Fehlermeldung und mysql_errno([con_id]) die Fehlernummer zurück.
3. Erstellen einer Database(Datenbank)
Ist noch keine Database eingerichtet, muss das manchmal manuell gemacht werden, vor allem auf den Homeservern. Bei Webspaceanbietern läuft meist eine Software wie Confix oder phpMyAdmin etc. um Databases, Tabellen, Datensätze zu erstellen, bearbeiten, löschen...
Hier aber der Befehl für PHP: mysql_create_db("database" [, con_id])
PHP-Code:
{ mysql_create_db("database", $con_id); // Man kann auch hier per If-Abfrage abfragen, ob es geklappt hat (true) oder ob es fehlgeschlagen ist (false) und Fehlermeldungen erstellen } else { echo("Aus technischen Gründen konnte keine Verbindung zur Datenbank hergestellt werden. Versuchen Sie es bitte zu einem späteren Zeitpunkt nochmals. n"); n"); n"); }
Die Database ist nun eingerichtet und kann mit Tabellen und Datensätzen befüllt werden.
4. Löschen einer Database
Möchte man die Database wieder löschen, kann man folgenden Befehl in PHP benutzen:
Alternativ kann man auch eine Query mittels mysql_query("SQL-Query", [con_id]) benutzen und als Abfrage "DROP DATABASE database_name" übergeben.
PHP-Code:
// Verbindung wurde aufgebaut, ich schreib das nun nicht jedesmal wieder hin
Wird der Befehl ausgeführt, wird die Database, samt Tabellen und Datensätzen, unwiederruflich (außer mit Backup) gelöscht, also vorsicht.
5. Erstellen einer Tabelle
Nun gehts los mit den Tabellen.
MySQL Tabellen sind wie oben erwähnt aufgeteilt in Zeilen und Spalten. Jede Zeile bildet einen Datensatz, den man auch als Tupel bezeichnet. Wir bleiben beim Datensatz.
Aufbau:
Bevor wir eine Tabelle erstellen können, müssen wir den Befehl mysql_query("SQL-Query"
kennen lernen. Der Befehl sendet einen SQL-Befehl an die Datenbank, diese Verarbeitet den Befehl.
Der MySQL-Befehl zum erstellen einer Tabelle lautet wie folgt:
Code:
CREATE TABLE tabellenname( Spalte1 Datentyp, Spalte2 Datentyp, Spalte3 Datentyp, ... );
Datentypen müssen bekannt sein. Die gängigsten wären:
- VARCHAR(maxLänge) für kürzere Texte, z.B. für Namen, Eintrag in Shoutbox mit max 255 Zeichen, etc.
- INT für Zahlenwerte (wobei man noch unterscheiden kann, ob Tinyint, Smalint, Mediumint, Int, Bigint..., je nach größe der Zahlen, die gespeichert werden sollen. Ist der Datentyp größer als die Zahlen, geht "nur" Speicher verloren, aber keine Zahlen)
- DATE für das Datum
- TEXT für größere Texte (z.B. Gästebuch-, Newseintrag)
(Weitere Datentypen und Infos bekommt man auf http://dev.mysql.com/doc/refman/5.1/de/da....html
Nun erstellen wir mal eine erste Tabelle, sagen wir für ein Newsscript. Was brauchen wir? Eine ID um die Beiträge identifizieren zu können, den Titel, den Beitrag und ein Datum
PHP-Code:
$sql = "CREATE TABLE tabNews( ID INT AUTO_INCREMENT PRIMARY KEY, Titel VARCHAR(100), Beitrag TEXT, Datum DATE );"; { echo("Die Tabelle tabNews wurde erfolgreich erstellt. n"); } else { echo("Die Tabelle tabNews konnte nicht erstellt werden. n"); n"); }
Damit wäre die erste Tabelle erstellt, natürlich nur, wenn es keine Probleme gab.
Der Titel kann in dem Fall bis zu 100 Zeichen lang sein, der Beitrag ist vom Typ TEXT und kann sehr groß sein, Datum erhält den Datentyp DATETIME und die ID ist ein INT mit den Eigenschaften AUTO_INCREMENT (erhöt automatisch um 1, wenn ein neuer Eintrag hinzugefügt wird) und PRIMARY KEY (Hauptschlüssel, um später schneller suchen zu können). Ein PRIMARY KEY kann nur EINMAL in der Tabelle vorkommen, auf keinen Fall doppelt. Bei AUTO_INCREMENT wird fortlaufend nummeriert, auch wenn ein Datensatz gelöscht wurde, erhält der nächste die nächste ID, die ohne löschen vorgekommen wäre. (Bsp: wir löschen den Datensatz mit der ID 2, der nächste Datensatz hat die ID 3, dann bekommt der neue Datensatz die 4, statt der freigewordenen 2)
6. Bearbeiten einer Tabelle
Manchmal kommt es vor, dass man noch eine weitere Spalte hinzufügen oder löschen oder umbenennen oder oder ihr eine andere Eigenschaft zuweisen möchte. Man könnte nun die Tabelle löschen und neu erstellen, dabei würden aber die Daten verloren gehen. Dafür hat MySQL folgende Lösung parat:
- Spalte hinzufügen: ALTER TABLE tabellenname ADD spaltenname DATENTYP;
- Spalte löschen: ALTER TABLE tabellenname DROP spaltenname;
- Spalte umbenennen: ALTER TABLE tabellenname CHANGE alter_spaltenname neuer_spaltenname DATENTYP;
Mehr zum ALTER TABLE hier: http://dev.mysql.com/doc/refman/5.1/de/al....html
Beispiel, wir wollen die Spalte Beitrag aus der Newstabelle umbenennen in News:
PHP-Code:
$sql = "ALTER TABLE tabNews CHANGE Beitrag News TEXT;"; // Die Abfrage, ob alles gut gegangen ist, lasse ich nun auch weg
7. Löschen einer Tabelle
Wird eine Tabelle nicht mehr gebraucht, kann sie gelöscht werden, um Speicherplatz freizuschaffen und die Datenbank zu entschlacken.
MySQL-Syntax: DROP TABLE tabellenname;
PHP-Code:
$sql = "DROP TABLE tabNews;";
Vorsicht: Alle Daten in der Tabelle werden unwiederruflich gelöscht.
8. Einfügen eines Datensatzes
Nun zum Füllen der Tabelle. Um einen Datensatz in eine Tabelle zu schreiben, benötigen wir folgende Syntax:
INSERT INTO tabellenname(Spalte1 [, Spalte2 [, Spalte3, ...]]) VALUES(Wert1 [, Wert2 [, Wert3, ...]]);
Die Daten kommen aus einem Formular, welches an die Verarbeitungsdatei gesendet wurde. Wir nehmen mal an, dass die Formulardaten in PHP-Variablen stehen, mit denen wir weiterarbeiten:
Titel: $titel = "Der erste Newsbeitrag";
News: $news = "Das hier ist der aller erste Newsbeitrag, der in dieser Tabelle steht.";
Das Datum werden mit dem Befehl CURDATE() im MySQL-Syntax eingetragen.
Auf die ID kann verzichtet werden, das erledigt dann MySQL.
PHP-Code:
$sql = "INSERT INTO tabNews(Titel, News, Datum) VALUES('".$titel."', '".$news."', CURDATE());"; { echo("Der Newseintrag wurde erfolgreich in der Datenbank gespeichert. n"); } else { echo("Der Newseintrag konnte nicht gespeichert werden. n"); n"); }
Damit wäre der erste Datensatz erstellt.
9. Auslesen eines Datensatzes
Zum Auslesen eines Datensatzes hat MySQL folgende Syntax:
[mysql]
SELECT Spalte1, Spalte2 [, Spalte3, ..] FROM tabellenname [WHERE Bedingung1 AND Bedingung2 OR Bedingung3] [ORDER BY Spalte1 ASC / DESC]... [mysql]
Auf deutsch: WÄHLE Spalte1, Spalte2, Spalte3 AUS tabellenname WO Bedingung1 UND Bedingung2 ODER Bedingung3 zutrifft SORTIERE NACH Spalte1 AUFSTEIGEND / ABSTEIGEND
Wir wollen nun alle Beiträge aus der Tabelle tabNews auslesen und sie nach Datum absteigend sortieren:
PHP-Code:
$sql = "SELECT * FROM tabNews ORDER BY Datum DESC;"; // Wir Speichern das Ergebnis der Abfrage in die Variable $result while($row = mysql_fetch_assoc($result)) // Jeder Datensatz wird einzeln, nacheinander in das Array $row gespeichert { echo("Titel: ".$row['Titel']." @ ".$row['Datum']." n"); // Die Ausgabe der Spalten. Der Arrayschlüssel ist der Selbe, den man in der Tabelle stehen hat echo("Eintrag: ".$row['News']." n"); }
Nun hätten wir die Datensätze ausgelesen und ausgegeben. Gestalten könnt ihr ja dann selbst.
Der Befehl mysql_fetch_assoc($resultat_aus_abfrage) gibt jeden Datensatz einzeln als Array an $row. Dabei hat das Array $row als Keys die Spaltennamen der MySQL-Tabelle.
Alternativ kann man auch mysql_fetch_row($resultat_aus_abfrage) (Keys sind nummeriert) oder mysql_fetch_object($resultat_aus_abfrage) (gibt an $row Objekte der Spalten zurück, die mit $row->Spalte1, $row->Spalte2, ... benutzt werden können) verwenden.
Wie man einen Datensatz ausliest hängt vom Script ab. Manchmal will man nur die letzten 5 - 10 Einträge z.B. bei einer Shoutbox, dann setzt man noch ein Limit:
SELECT Name, Beitrag FROM tabShoutbox LIMIT 5;
Oder man will alle Beiträge, deren ID größer 5 und kleiner 10 sind auslesen:
SELECT Name, News, Datum FROM tabNews WHERE ID > 5 AND ID < 10;
Oder ... Es gibt viele Möglichkeiten
10. Bearbeiten eines Datensatzes
Wenn nun nachträglich ein Datensatz verändert werden soll, muss man folgenden Syntax von MySQL nutzen:
UPDATE tabellenname SET Spalte1 = Wert1, Spalte2 = Wert2, ... WHERE Bedingung1 AND Bedingung2...;
Nehmen wir an, wir hätten im Titel einen Fehler entdeckt, die News hat die ID 2:
PHP-Code:
$neuerTitel = "Es ist der zweite Eintrag (editiert)"; $sql = "UPDATE tabNews SET Titel = '".$neuerTitel."' WHERE ID = '2';";
Damit wäre der Titel im Datensatz mit der ID 2 geändert, der neue Titel wäre eingetragen.
Auch hier kann man wieder verschiedene Bedingungen einbauen, wie oben schon geschrieben.
11. Löschen eines Datensatzes
Kommen wir zum letzten Punkt, dem Löschen von Datensätzen. Dafür bietet MySQL folgenden Syntax:
DELETE FROM tabellenname WHERE Bedingung1 AND Bedingung2 OR Bedingung3;
Wir wollen den Datensatz mit der ID 3 löschen:
PHP-Code:
$sql = "DELETE FROM tabNews WHERE ID = '3' LIMIT 1;";
Damit wäre der Datensatz gelöscht.
LIMIT 1 wäre im Grunde nicht nötig, da die Bedingung eindeutig ist, in anderen Fällen kann sie den Datenbestand retten, da dadurch nur 1 Datensatz gelöscht wird.
So, das wäre mein kleines Tutorial um MySQL näherzubringen. Ich hoffe, dass alles Verständlich ist. Bei Fragen werde ich versuchen diese zu klären.
Viel Spaß beim ausprobieren.
PS: Ja, das ist von mir geschrieben, auch schon 2006 (Ich habe heute Anpassungen vorgenommen) und es wurde einst bei www.gamerenders.de eingetragen (nur im Falle, dass es wieder zu Unstimmigkeiten kommen sollte). Falls jemand dieses Tutorial von einer anderen Seite als dieser oder gamerenders.de kennt, kann er mir dies gerne sagen und ich werde mich mit der betreffenden Seite in Verbindung setzen.