Anfang

Bei MySQL handelt es sich um eine Datenbank die wie zB Access auf SQL aufgebaut ist. Bei den meisten Webspaceangeboten mit Datenbankuntestützung handelt es sich um MySQL Datenbanken, da die dazu benötigte Software Freeware ist.

Man kann sich sowohl MySQL, als auch eine sehr angenehme Benutzeroberfläche auf seinem eigenen Rechner installieren. Da dies jedoch sehr häufig zu Problemen führt, bevorzuge ich es, Datenbankanbindungen direkt bei meinem Hoster zu testen und nicht extra offline zu arbeiten.

Da die meisten Hoster mittlerweile sogar die Administrationsoberfläche phpMyAdmin für die Datenbanken bereits vorinstalliert anbieten und sich sowohl MySQL, als auch phpMyAdmin derart schnell weiterentwickeln, dass man selbst manchmal mit dem Updaten nicht nachkommt, gibt es hier keine Erklärung (mehr) für die Installation, sondern nur noch eine für die Anwendung.

Je nach Hoster hat man normalerweise entweder im Kundenmenü die Möglichkeit, sich eine Datenbank anzulegen und dabei Benutzername und Kennwort zu wählen, oder man bekommt die Datenbank fix vorinstalliert vom Hoster, der einem auch das Passwort und den Benutzernamen mitteilt.

Ebenso erfährt man vom Hoster oder direkt im Kundenmenü die URL für die phpMyAdmin, die normalerweise in einem passwortgeschützten Verzeichnis liegen sollte, wodurch man sich beim Aufrufen mit einem Benutzernamen und einem Passwort identifizieren muss. Das kann dasselbe sein wie für die Datenbank oder für den FTP-Zugang, muss es aber nicht. Im Notfall hilft der Hoster da aber sicher gerne weiter.

Über die phpMyAdmin kann man dann mittels einer bequemen Oberfläche seine Datenbank(en) und Tabellen verwalten, anlegen, löschen, exportieren etc. All diese Operationen kann man selbstverständlich auch ohne phpMyAdmin ausführen, indem man den entsprechenden Code einfach von Hand programmiert, aber ehrlich gesagt ist es für viele Dinge einfach angenehmer, etwas Fertiges zu verwenden.

Du musst auch nicht befürchten, dass jemand anderer, der deinen Computer benutzt, deine Daten einfach mal so in den Papierkorb verschiebt oder daran herumpfuscht, da bei den meisten Webhosting-Angeboten ein Passwortschutz auf dem entsprechenden Verzeichnis liegt. Sollte dir das immer noch nicht sicher genug sein, besorgst du am besten gebrauchte PCs für deine Mitbenutzer, dann habt ihr alle etwas davon ;-)

Aber genug der Einführung, wir rufen jetzt einmal die phpMyAdmin auf und legen unsere erste Tabelle an.


Datenbanken und Tabellen

Eigentlich arbeiten wir nicht direkt mit Datenbanken, sondern mit den Tabellen, die sich darin befinden. So kann eine Datenbank aus vielen Tabellen bestehen und die Datenbank ist eigentlich nicht mehr als ein Ordner, in dem sich alle diese Tabellen befinden.

Die Datenbank wird üblicherweise direkt vom Hoster angelegt oder wir haben sie bereits über das Kundenmenü erstellt. In der phpMyAdmin sehen wir auf der linken Seite alle unsere Datenbanken. Wenn wir nur eine haben, sehen wir auch gleich die dazugehörigen Tabellen, sonst müssen wir zuerst die Datenbank aussuchen, mit der wir arbeiten wollen. Da in unserer Datenbank noch keinerlei Tabellen sind, legen wir jetzt eine an.

Dabei können wir entweder mit SQL-Anweisungen arbeiten oder eine bequeme Benutzeroberfläche nutzen. Der Weg über die SQL-Anweisung ist der schnellere - jedoch muss man dafür auch Ahnung von SQL haben :-) Wir machen es also über die Benutzeroberfläche.

Wir wählen dafür zuerst unsere Datenbank aus indem wir links darauf klicken oder sie je nach Version aus einem Dropdown-Feld auswählen. Ganz unten auf der Seite finden wir jetzt Neue Tabelle in Datenbank DB-NAME erstellen: und vergeben einen Tabellennamen. Außerdem müssen wir festlegen, wieviele Spalten wir brauchen.

Aus dem Grund ist es sinnvoll, sich zunächst zu überlegen, was man in der Tabelle braucht.

Es ist vernünftig in jeder Tabelle eine so genannte ID zu verwenden, die jeden Datensatz eindeutig identifiziert. Alle anderen Felder richten sich nach der Verwendung der Datenbank.

Ich werde jetzt eine Tabelle verwenden, die den Sinn einer Linkverwaltung hat. Das heißt, wir speichern darin die Internetadressen, den Namen des Links, den Namen des Besitzers der HP, die Adresse zu einem Banner (falls wir unterschiedlich große Banner haben können wir auch noch Breite und Höhe darin abspeichern - das machen wir jetzt aber nicht) und eine Seitenbeschreibung. Später können wir diese Daten über unterschiedliche Abfragetypen wieder auslesen. Wir legen also zunächst insgesamt 6 Felder in unserer Tabelle an.

Dafür schreiben wir in das erste Feld, das den Namen der Tabelle bestimmt links und in das zweite Feld, das die Anzahl der Spalten angibt 6 hinein und klicken danach auf OK.

Jetzt landen wir bei einer weiteren Benutzeroberfläche mit zahlreichen Reihen und Spalten. Jede Reihe entspricht einem Feld und die Spalten bieten uns unterschiedliche Möglichkeiten.

In die erste Spalte gehört der Feldname eingetragen, danach folgt der Typ (hier wird zB festgelegt ob es sich um ein Feld mit Zahlen oder mit Text handelt). In die dritte Spalte wird die maximale Länge des Feldinhaltes geschrieben (ist jedoch nicht bei allen Felddatentypen möglich). Die nächste Spalte kannst du erstmal ignorieren, phpMyAdmin verwendet dort Standardwerte, wenn du nichts angibst und mit denen fährst du meistens richtig. Danach folgen noch Attribute, die Bestimmung ob das Feld leer sein darf, Standardwerte, Extras und zum Schluss die Festlegung ob es sich um einen Schlüssel, ein Indexfeld und/oder ein einmaliges Feld handelt. Außerdem ist es möglich, einen Haken bei Volltext zu setzen oder einen Kommentar dazu zu schreiben.

Puh, was heißen denn jetzt diese ganzen Fachbegriffe?

Nun, ein Schlüsselfeld dient dazu, einen Datensatz eindeutig zu identifzieren. Daher ist es automatisch auch ein "einmaliges Feld", das heißt, der Feldinhalt darf kein zweites Mal in der selben Spalte vorkommen (das sind meistens IDs - also jede ID nur einmal und nicht doppelt vergeben).

Wir verwenden jetzt also für unsere ID folgende Werte:

id, int, 5, leer lassen, unsigned, not null, leer lassen, auto_increment, Haken bei Primärschlüssel setzen

Durch int wird das Feld als Zahlenfeld festgelegt (int steht für Integer - einen speziellen Zahlentyp) und auto_increment legt fest, dass das Feld automatisch um eines erhöht wird bei jedem neuen Datensatz. Der Haken bei Primärschlüssel sorgt dafür, dass unsere id als Schlüssel verwendet wird.

Für die anderen verwenden wir:

url, varchar, 100, leer lassen, not null, alles andere leer lassen
urlname, varchar, 250, leer lassen, not null, alles andere leer lassen
name, varchar, 100, leer lassen, not null, alles andere leer lassen
banner, varchar, 250, leer lassen, not null, alles andere leer lassen
beschreibung, text, leer lassen, leer lassen, not null, alles andere leer lassen

varchar Felder sind Textfelder mit einer bestimmten Größe und text sind Textfelder ohne bestimmte Größe (falls besonders viel Inhalt erforderlich ist, ist auch longtext möglich.

So sieht das dann aus: Popup

Unsere Eingaben bestätigen wir anschließend mit Speichern und bekommen dann die Meldung, dass die Tabelle angelegt wurde (inklusive des dazugehörigen SQL-Statements).

Falls dir das jetzt zu kompliziert war und du erstmal keine Ahnung hast, was das alles soll, tröstet es dich vielleicht, dass es ganze Firmen gibt, die sich speziell mit Datenbank Entwicklung beschäftigen. Es gehört also nicht zu den Arbeiten, die man sofort verstehen und beherrschen muss.

Damit haben wir jetzt die Tabelle angelegt und können sie als nächstes füllen.


Tabellen füllen

Um die benötigten Daten in die Tabelle zu bringen gibt es jetzt verschieden Möglichkeiten.

Die erste eignet sich vor allem dann, wenn sämtliche Daten bereits als Datei (besonders angenehm - fertige CSV-Dateien) vorliegen.

In dem Fall wählen wir in phpMyAdmin ganz oben Importieren und geben den Pfadnamen und die Zeichencodierung (das voreingestellte utf8 funktioniert meistens, ansonsten probiere es am besten mal mit binary) an. Bei Dateiformat wählen wir CSV und können jetzt noch ein paar Punkte auswählen:

Tabelleninhalte ersetzen sorgt dafür, dass die Daten, die schon in der Tabelle stehen von den Daten unserer CSV-Datei ersetzt werden.
Ignoriere doppelte Zeilen soll genau das machen.
Felder getrennt mit gibt die Trennzeichen der einzelnen Spalten an. Ich verwende dafür gerne |, weil die normalerweise nicht als tatsächlicher Inhalt vorkommen. Das musst du aber an deine CSV-Datei anpassen. Ebenso die Punkte Felder eingeschlossen mit, Felder escaped von und Zeilen getrennt mit. Außerdem kannst du noch die Spaltennamen, die importiert werden sollen angeben. Nicht immer klappt alles, wenn du merkwürdige oder keine Daten in die Datenbank bekommst, probiere es einfach mit geänderten Einstellungen noch einmal.

Aber was ist denn eigentlich eine CSV-Datei? Nun ja, es ist einfach eine Textdatei in der alle Inhalte gespeichert sind und in der die einzelnen Spalten mit einem Trennzeichen voneinander getrennt werden. Das schaut dann ungefährt so aus (immer ein Datensatz in einer Zeile - hier ist nur aus Platzgründen ein Zeilenumbruch):
  1|http://www.schattenbaum.net|Schattenbaum|Claudia
    Unkelbach|schattenbanner.gif|Viiiiieles!
  2|http://www.htmling.net|HTMLing|Cloud & Unki|
    htmling.gif|Tutorials zu HTML, CSS, Flash und PHP
  3|http://www.gedichte-traumland.de|Dreamer's 
    Traumwelten|Dreamer|dreamerbanner.jpg|Gedichte,
    Gedichte, Gedichte ...
Hat man die Daten bereits in einer Excel-Tabelle kann diese ganze einfach als CSV-Datei exportiert werden. Sonst kann man sie aber auch problemlos mit einem Texteditor anlegen.

Hat man keine CSV-Datei kann man die Daten auch einzeln per Hand eintragen.

Dazu wählen wir den Link Einfügen und füllen alle Felder in der Spalte Wert aus (die anderen Felder bitte so lassen, wie sie sind!), außer id. Dabei müssen wir jeden Datensatz einzeln eintragen, bzw. jeweils zwei auf einmal, wenn man den Haken bei "Ignorieren" weg macht. Wenn man mit dieser Methode mehrer Datensätze auf einmal eintragen muss ist es daher sinnvoll "Als neuen Datensatz speichern" und "anschließend einen weiteren Datensatz einfügen" auszuwählen, ansonsten kannst du das zweite Feld auch auf "zurück" lassen.

Da wir für das ID-Feld den Wert auto_increment verwenden müssen wir das id-Feld nicht ausfüllen (wenn wir eine CSV-Datei verwenden muss es aber angegeben sein!).

Wenn du jetzt eine der beiden Methoden nutzt und ein paar Daten einfüllst, haben wir schon die ersten Datensätze in unserer Tabelle und können damit weiter arbeiten.


Verbindung herstellen

Um jetzt mit PHP auf die Daten in unserer Datenbank zugreifen zu können, müssen wir zunächst eine Verbindung herstellen. Dies erfolgt über den Befehl mysql_connect und noch vor allen anderen Inhalten des Dokumentes.

Der Befehl benötigt den Servernamen, den Benutzernamen und das Kennwort. Benutzername und Kennwort ist das, was bei der Datenbank angegeben wird. Du findest das entweder in der Konfigurationsoberfläche deines Hosters oder hast sie evtl. per eMail bekommen. Der Servername ist häufig "localhost". Immer mehr Hoster haben aber ihre Datenbanken auf einen eigenen Server ausgelagert. In dem Fall muss dann der Pfad zu dem Server angegeben werden.

Und so schaut das dann zB aus:
  <?php
  mysql_connect("localhost","Benutzername","Passwort");
  ?>
Und damit haben wir eine Verbindung zum Server hergestellt.

Als nächstes benötigen wir eine Verbindung zu der Datenbank, aus der wir unsere Daten holen wollen. Dafür gibt es den Befehl mysql_select_db.

Hierbei wird einfach angegeben, welche Datenbank man haben möchte, wobei der Datenbankname entweder von uns oder vom Hoster vorgegeben wurde. Das kann dann zB so aussehen:
  <?php
  mysql_select_db("db1-schattenbaum");
  ?>
In unserem Fall ist das die Datenbank db1-schattenbaum.

Da diese Daten in den meisten Fällen gleich bleiben werden (außer man verwendet mehrere Datenbanken bzw. Server), ist es sinnvoll, diesen Teil in einer extra Datei zu speichern und sie anschließend über den Befehl include wieder einzubinden.

Bei mir nennt sich diese Datei dbconnect.php (die Endung ist egal, aber eine PHP-Datei kann von niemandem gelesen werden und somit sind die Daten sicher) und beinhaltet folgendes:
  <?php
  mysql_connect("localhost","Benutzername","Passwort");
  mysql_select_db("db1-schattenbaum");
  ?>
In der Datei, in der wir die Datenbankverbindung benötigen steht dann ganz oben (vor <html> oder irgendetwas anderem)
  <?php
  include("dbconnect.php");
  ?>
Sollte irgendetwas bei der Verbindung zur Datenbank nicht funktionieren, ist es sinnvoll, sich Warnmeldungen anzeigen zu lassen, damit man weiß, wo der Fehler auftrat. Diese erfolgen jeweils vor dem Semikolon und sehen dann so aus:
  <?php
  mysql_connect("localhost", "Benutzername","Passwort") or die
    ("Keine Verbindung moeglich");
  mysql_select_db("db1-schattenbaum") or die
    ("Die Datenbank existiert nicht.");
  ?>
Damit erfährt man, wenn die Verbindung nicht funktioniert hat, ob der Fehler am Verbinden oder an der Auswahl der Datenbank lag.

Und nachdem wir jetzt verbunden sind, wollen wir doch auch unsere Daten abfragen.
Einfache Abfragen

Die Daten aus unseren Tabellen können wir jetzt mittels SQL-Befehlen wieder abfragen.

Dabei wird zunächst die gewünschte Abfrage festgelegt und in einer Variable gespeichert - anschließend wird die Abfrage ausgeführt.

Bei der einfachsten Form der Abfrage wird festgelegt, welche Spalten aus welcher Tabelle übernommen werden sollen. Das sieht dann (inkl. Speicherung in einer Variable) so aus:
  <?php
  $abfrage = "SELECT url FROM links";
  ?>
Damit wählen wir die Spalte url aus der Tabelle links aus.

Möchten wir mehrere Spalten auswählen, werden die einzelnen Spaltennamen durch ein Komma voneinander getrennt:
  <?php
  $abfrage = "SELECT url, urlname FROM links";
  ?>
Wenn wir jedoch alle Spalten aus einer Tabellen haben wollen, müssen wir nicht jeden Spaltennamen extra angeben sondern können den Stern * verwenden, der alle Spalten auswählt.
  <?php
  $abfrage = "SELECT * FROM links";
  ?>
Mit diesem System wird jeweils der Spaltenname als Variablenname verwendet. Wollen wir andere Namen dafür haben können wir folgendes verwenden:
  <?php
  $abfrage = "SELECT url AS adresse FROM links";
  ?>
Damit ist die URL nicht mehr unter der Variable url sondern unter adresse gespeichert.

Um die Abfrage jetzt auch auszuführen und die dabei erhaltenen Daten in einer Variable zu speichern verwenden wir den Befehl mysql_query.
  <?php
  $abfrage = "SELECT * FROM links";
  $ergebnis = mysql_query($abfrage);
  ?>
Damit sind jetzt die Daten in der Variable ergebnis gespeichert.

Wir können das natürlich auch noch zusammen fassen, anstatt es in zwei Variablen zu schreiben:
  <?php
  $ergebnis = mysql_query("SELECT * FROM links");
  ?>
Neben diesen ganz simplen Abfragen, gibt es aber auch speziellere Abfragen.


Weitere Abfragen

Bisher haben wir entweder alle Spalten oder einige Spalten einer kompletten Tabelle abgefragt. Das heißt, wir haben nicht nach irgendwelchen Kriterien ausgewertet. Aber auch das ist mit PHP und MySQL möglich.

Nehmen wir an, wir wollen alle Datensätze anzeigen, bei denen die id kleiner als 5 ist. Für den Zweck können wir folgenden Befehl verwenden:
  <?php
  $abfrage = "SELECT * FROM links WHERE id < 5";
  ?>
Durch das Anhängen des Befehls "WHERE" und der Bedingung, die daran angeschlossen wird, können wir das erreichen.

Möchte man alle Links anzeigen lassen, die von einem bestimmten Menschen sind, kann man auch dieses machen:
  <?php
  $abfrage = "SELECT * FROM links WHERE name LIKE 'Claudia Unkelbach'";
  ?>
Diese Abfrage enthält alle Links, bei denen mein Name eingetragen ist (ist natürlich hauptsächlich dann sinnvoll, wenn es dazu mehrere Links gibt).

Dabei muss das gesuchte Wort unter Anführungszeichen gesetzt werden.

Eine weitere "besondere" Abfrage erfolgt dann, wenn wir die Datensätze sortieren lassen - zB nach den Adressen der Seiten.

Zu diesem Zweck gibt es den Befehl ORDER BY.
  <?php
  $abfrage = "SELECT * FROM links ORDER BY url";
  ?>
Nach dem ORDER BY wird das Feld angegeben, nach dem sortiert werden soll.

Standardmäßig erfolgt die Sortierung von A bis Z. Möchte man sie jedoch umgekehrt sortiert haben kann man noch den Befehl DESC anhängen (der Befehl für eine Sortierung von A bis Z wäre ASC).
  <?php
  $abfrage = "SELECT * FROM links ORDER BY url DESC";
  ?>
Der Befehl DESC funktioniert nur in Verbindung mit einer ORDER BY Anweisung (sonst ist ja nicht bekannt, was absteigend sortiert werden soll).

Ein letzter interessanter Befehl für Abfragen ist das LIMIT.

Mit diesem kann bestimmt werden, dass nur eine bestimmte Anzahl von Datensätzen abgefragt werden soll (ist zB bei Gästebüchern sehr interessant).

Der Befehl besteht aus zwei Angaben. Die erste sagt, ab welchem Datensatz abgefragt werden soll und der zweite gibt an, wieviele Datensätze abgefragt werden sollen.
  <?php
  $abfrage = "SELECT * FROM links LIMIT 4, 10";
  ?>
Damit werden 10 Datensätze ab dem 5. abgefragt (der erste Datensatz ist 0).

Möchte man beim ersten Datensatz beginnen ist die zweite Angabe ausreichend (die Anzahl der Datensätze die abgefragt werden sollen).
  <?php
  $abfrage = "SELECT * FROM links LIMIT 10";
  ?>
Möchte man anstatt der ersten 10 Datensätze die letzten 10 angezeigt bekommen ist es sinnvoll, sie davor zu sortieren (am besten wiederum nach der id).
  <?php
  $abfrage = "SELECT * FROM links ORDER BY id DESC LIMIT 10";
  ?>
Zunächst werden die Datensätze nach der id sortiert und anschließend in eine absteigende Reihenfolge gebracht. Zum Schluss wird bestimmt, dass lediglich 10 Datensätze ausgegeben werden sollen.

Lass dich von dieser Vielzahl von unterschiedlichen Abfragen nicht verwirren. Die, die du verwendest bzw. brauchst, wirst du immer finden - einfach indem du dir durch den Kopf gehen lässt, was du brauchst.

Und als nächstes schauen wir uns an, wie wir die Daten ausgeben können, die wir gerade erhalten haben.


Daten ausgeben

Nachdem wir nun die Abfrageergebnisse in einer Variable gespeichert haben, könnte man annehmen, dass man diese Variable einfach nur mittels echo ausgeben muss. Dem ist aber (leider) nicht so.

Die Daten, die wir erhalten haben, verhalten sich ähnlich, wie ein Array, müssen jedoch erst übergeben werden.

Wollen wir alle Daten ausgeben (bzw. alle Datensätze) verwenden wir am besten eine while-Schleife, die alle Datensätze uuml;bernimmt und ausgibt und solange ausgeführt wird, wie Datensätze im Abfrageergebnis vorhanden sind.

Zur Übernahme der Datensätze wird der Befehl mysql_fetch_object verwendet.
  <?php
  $ergebnis = mysql_query("SELECT url, urlname FROM links");
  while($row = mysql_fetch_object($ergebnis))
  {
    echo $row->url;
  }
  ?>
Das schaut auf den ersten Blick viel komplizierter aus, als es tatsächlich ist.

Die erste Zeile macht das, was wir bereits durchgeführt haben (die Abfrage erstellen und ausführen) und ist hier nur, um klar zu machen, was genau wir abgefragt haben.

Danach kommt die while-Schleife. Die Bedingung dazu lautet "solange ein Eintrag aus der Variable Ergebnis als Arrayinhalt in die Variable row geschrieben wird führe die Schleife aus" - dadurch werden alle Datensätze ausgegeben und die while-Schleife automatisch beendet, wenn alles ausgegeben ist.

Schließlich die Anweisung zur while-Schleife. Hierbei wird mittels echo Befehl jeweils der Inhalt der Spalte url ausgegeben (das $row->url ist notwendig, weil wir so die jeweilige Spalte ansprechen).

Über $row-> und den Spaltennamen können die Spalten beliebig angesprochen werden.

Für besondere Ausgaben (wie zB Tabellen, die jeweils eine bestimmte Anzahl von Spalten haben sollen) genügt ebenfalls eine while-Schleife, jedoch sieht diese dann weitaus umständlicher und komplizierter aus und ist darüber hinaus verschachtelt. Aber das Prinzip bleibt immer gleich.

Als nächstes wäre von Interesse, wie über PHP (also zB mittels eines Onlineformulares) Datensätze in der Datenbank aufgenommen werden können.


Daten hinzufügen

Das Einfügen von Daten in eine Datenbank funktioniert am sinnvollsten mit einem Formular, in das diese Daten eingegeben werden können und das danach übermittelt wird.

In unserem Fall mit der Linkliste könnte man damit zB eine Linkliste, in die andere ihre Seiten eintragen können realisieren. Oder es dient einfach als Online-Administration.

Ich setze jetzt also ein Formular voraus, in das die Url, der Name des Links, der Name des Seitenbesitzers, eine Bannerurl und eine Beschreibung eingetragen werden. Das Formular wird ganz normal mittels HTML erstellt, denk bitte daran, dass die Namen der einzelnen Formularfelder zu unseren Variablennamen werden. Wir wollen die Variablen url, hpname, name, banner und beschreibung verwenden.

Wenn das Formular für die breite Öffentlichkeit bestimmt ist, und du die übergebenen Daten nicht von Hand kontrollierst, ist es sinnvoll, die aus dem Formular kommenden Daten zuerst auf ihre Korrektheit zu überprüfen - da das aber tiefergehendes Wissen erfordert, lassen wir es hier aus und übernehmen die Daten direkt. Um es später übersichlichter zu machen, schreiben wir sie aber in kurze Variablen um:
  <?php
  $url = $_POST["url"];
  $hpname = $_POST["hpname"];
  $name = $_POST["name"];
  $banner = $_POST["banner"];
  $beschreibung = $_POST["beschreibung"];
  ?>
Der Befehl zum Einfügen dieser Daten funktioniert jetzt so ähnlich wie die Abfrage. Zunächst wird festgelegt was, wo eingefügt werden soll und das wird in einer Variable gespeichert.
  <?php
  $eintrag = "INSERT INTO links (url, urlname, name,
  banner, beschreibung) VALUES ('$url', '$hpname',
  '$name', '$banner', '$beschreibung')";
  ?>
Nach dem "INSERT INTO" wird festgelegt in welche Tabelle und in welche Spalten (die Angabe der Spaltennamen erfolgt in Klammer) unsere Daten eingefügt werden sollen. Mit "VALUES" wird angegeben, was für Werte verwendet werden sollen. Da bei uns alles in Variablen gespeichert wird, werden diese Variablennamen in Hochkomma angeführt.

Da wir für die Spalte id Autowerte verwenden müssen wir diesen Wert nicht von Hand eintragen - er wird automatisch eines höher gesetzt als der vorige Wert war.

Um den Eintrag jetzt durchführen zu lassen verwenden wir wieder den Befehl mysql_query.
  <?php
  $eintragen = mysql_query($eintrag);
  ?>
Und schon stehen die Daten in der Datenbank.

Das kann man natürlich auch wieder in einen einzelnen Befehl zusammen fassen:
  <?php
  $eintragen = mysql_query("INSERT INTO links 
  (url, urlname, name,  banner, beschreibung) VALUES
  ('$url', '$hpname', '$name', '$banner', '$beschreibung')");
  ?>
Gerade bei dieser Funktion passieren mir meistens Fehler, da es sehr schnell passiert, dass Variablennamen falsch geschrieben oder zuwenige Werte angeben werden. Dann erfolgt überhaupt kein Eintrag in die Datenbank. Gib also darauf acht.

Nachdem wir jetzt Datensätze eingefügt haben, wollen wir auch wieder welche löschen.


Daten löschen

Das Löschen von Datensätzen aus einer Datenbank ist mit noch weniger Aufwand verbunden als das Einfügen von Daten. Jedoch sollte man sich bei jedem Löschvorgang bewusst sein, dass er nicht rückgängig gemacht werden kann.

Man gibt hierbei ebenfalls an, welche Tabelle angesprochen werden soll und zusätzlich welcher Datensatz gelöscht werden soll.

Die Bestimmung des Datensatzes erfolgt über einen bestimmten Inhalt einer Spalte. Daher eignet sich beim einzelnen Löschen vor allem das id-Feld um einen Datensatz eindeutig zu identifizieren und daher keinen falschen zu löschen.

Auch hier erfolgt die Ausführung des Befehls in zwei Schritten:
  <?php
  $loeschen = "DELETE FROM links WHERE id = '3'";
  ?>
Mit dem "DELETE FROM" wird festgelegt, aus welcher Tabelle die Datensätze gelöscht werden sollen und nach dem "WHERE" wird festegelegt welche Spalte welchen Wert erhalten soll (der Wert wird in einfache Anführungszeichen (auch Hochkommata genannt) gesetzt).

In unserem Fall ist das die Spalte id und der Datensatz, bei dem in dieser Spalte der Wert 3 enthalten ist wird gelöscht.

Dafür brauchen wir aber wiederum den Befehl mysql_query.
  <?php
  $loesch = mysql_query($loeschen);
  ?>
Und schon ist der Eintrag aus der Datenbank verschwunden.

Auch das kann natürlich wieder zusammen gefasst werden:
  <?php
  $loesch = mysql_query("DELETE FROM links WHERE id = '3'");
  ?>
Wie gesagt - hierbei ist Vorsicht geboten, da der Eintrag ohne Nachfragen gelöscht wird und danach nicht wieder hergestellt werden kann.

Nachdem wir jetzt Daten eingefügt und gelöscht haben gibt es noch eine ähnliche Funktion, die wir auch oft benötigen werden - nämlich das Ändern von Datensätzen.


Daten ändern

Datensätze zu ändern ist eine Mischung aus dem Anfügen von Datensätzen und dem Löschen.

Auch dieser Befehl erfordert zwei Schritte.

Im ersten wird wieder der Befehl definiert und in einer Variable gespeichert, während der zweite Befehl das Update durchführt.
  <?php
  $aendern = "UPDATE links Set urlname = 'Schatten unter dem
  Baum' WHERE id = '4'";
  ?>
In diesem Fall wird nach dem "UPDATE" der Tabellenname angegeben gefolgt von einem "Set" das bestimmt, welche Spalte auf welchen Wert geändert werden soll. In unserem Fall ändern wir den Namen der Homepage.

Mit dem "WHERE" bestimmen wir, welcher Datensatz geändert werden soll. In unserem Fall ist das der, der die id 4 erhalten hat.

Auch in diesem Fall dient die id der eindeutigen Bestimmung eines Datensatzes.
  <?php
  $update = mysql_query($aendern);
  ?>
Und wiederum wird der Befehl (das Update) durch den Einsatz des Befehls mysql_query ausgeführt, was natürlich auch wieder zusammen gefasst werden kann:
  <?php
  $update = mysql_query("UPDATE links Set urlname = 'Schatten unter dem
  Baum' WHERE id = '4'");
  ?>
Wenn mehrere Werte auf einmal geändet werden sollen funktioniert das, indem man die "Änderungspaare" durch Komma trennt. Also so:
  <?php
  $aendern = "UPDATE links Set urlname = 'Schatten unter
  dem Baum', url = 'http://www.schattenbaum.net/php'
  WHERE id = '4'";
  ?>
Damit haben wir die wichtigsten Funktionen für MySQL durch und schauen uns zum Abschluss an, wie man eine Verbindung wieder beendet.


Verbindung beenden

Erfolgte eine Abfrage von Daten einer Tabelle müssen die Daten wieder frei gegeben werden, bevor eine neue Abfrage erfolgen kann. Zu diesem Zweck wird die Abfrage "beendet".
  <?php
  $ergebnis = mysql_query("SELECT * FROM links");
  ...
  mysql_free_result($ergebnis);
  ?>
Die erste Zeile ist die Abfrage und das Ausführen der Abfrage. Danach kann weiterer Code (wie zB die While-Schleife) kommen. Zum Schluss wird das Ergebnis, dass beim Ausführen der Abfrage enstanden ist und in der Variable ergebnis gespeichert wurde wieder frei gegeben.

Hat man beim Verbindungsaufbau zur Datenbank die Verbindungdaten in einer Variable gespeichert kann auch diese problemlos beendet werden. Das ist allerdings nicht unbedingt erforderlich und ich persönlich mache es eigentlich nie.

Sinn hätte es, wenn man mehrere Datenbanken abfragt bzw. abfragen muss. Der Befehl dazu lautet so:
  <?php
  $verbindung = mysql_connect("localhost","Benutzername","Passwort");
  mysql_select_db("db1-schattenbaum");
  
  ... diverse Abfragen etc. ...
  
  mysql_close($verbindung);
  ?>
Damit ist die Verbindung in der Variable verbindung gespeichert und wird, nachdem alle Abfragen etc. ausgeführt wurden über den Befehl mysql_close wieder geschlossen.

Das komplette Tutorial findet sich unter http://www.schattenbaum.net/php