Mit der MySQL-Datenbank verbinden:
<?php
$host_name = 'HOSTNAME_EINTRAGEN';
$user_name = 'USERNAME_EINTRAGEN';
$password = 'PASSWORD_EINTRAGEN';
$database = 'DATENBANKNAME_EINTRAGEN';
$connect = mysqli_connect($host_name, $user_name, $password, $database);
?>
- Vorbereitungen
- Verbindung herstellen
- SQL-Abfrage durchführen
- Übungen
Inhaltsverzeichnis
Vorbereitungen
Bevor wir loslegen können, brauchen wir erst einmal eine Datenbank sowie (darin enthalten) mindestens eine SQL-Tabelle. Wenn Sie beides schon haben, können Sie diesen Schritt gern überspringen.
Es ist am einfachsten, eine Datenbank mit phpMyAdmin zu erstellen.
Wenn Sie PHP auf einem lokalen Apache Server mithilfe von XAMPP verwenden, ist in den meisten Fällen phpMyAdmin schon fertig eingerichtet. Rufen Sie hierzu im Browser einfach localhost/phpmyadmin auf (die Apache- und MySQL-Server müssen natürlich laufen).
Betreiben Sie PHP dagegen auf einem online Webspace, stellt Ihnen ein Provider wie 1&1 phpMyAdmin oftmals bereits vorinstalliert zur Verfügung. Ist dies bei Ihrem Provider nicht der Fall, müssen Sie es erst noch installieren.
Um eine neue Datenbank zu erstellen, klicken Sie in phpMyAdmin im Seitenmenu links auf Neu und geben anschließend den Namen der Datenbank ein, die Sie anlegen wollen. Wenn dieser Punkt nicht verfügbar ist, müssen Sie die Datenbank über den Admin-Bereich des Webspace-Kontos Ihres Providers anlegen (z.B. Menupunkt MySQL-Datenbank > Datenbank erstellen).
Tabelle erstellen
Ihre Datenbank benötigt nun eine Tabelle, in welche die Datensätze eintragen werden. Wählen Sie hierzu links im Seitenmenu von phpMyAdmin die soeben erstellte Datenbank aus. Geben Sie nun unter Erzeuge Tabelle den Namen der Tabelle und ihre Spaltenzahl an. Wir nennen unsere Test-Tabelle einfach mal mitarbeiter (jaja, sehr originell) und wählen als Spaltenanzahl 5 aus. Klicken Sie anschließend auf OK.
Sie müssen im nächsten Schritt die Struktur der Tabelle anlegen. Die Struktur könnte zum Beispiel zu aussehen:
Wenn Sie fertig sind, klicken Sie auf Speichern. Die Tabelle ist damit erzeugt.
Datensätze einfügen
Die Tabelle wartet nun darauf, mit Datensätzen gefüttert zu werden! Um das zu tun, klicken Sie im Seitenmenu links unterhalb des Datenbank-Icons auf die eben erstellte Tabelle mitarbeiter. Wählen Sie anschließend im Menu oben den Button Einfügen aus.
Sie tragen anschließend die Datensätze mit gültigen Werten ein und bestätigen am Ende mit OK.
Nun hat Ihre Tabelle ein paar Datensätze. Sie können sich diese mit einem Klick auf Anzeigen (im Menu oben) ansehen, ändern oder löschen.
Wir haben nun eine MySQL-Datenbank mit einer Tabelle angelegt. Es wird Zeit, PHP ins Spiel zu bringen 😎
Verbindung herstellen
Um eine Verbindung mit der MySQL-Datenbank herzustellen, brauchen wir folgende Informationen über unseren MySQL-Server:
- Hostname
- Username
- Passwort
- Datenbankname
Wir speichern diese Daten am besten in vier Variablen. Anschließend rufen wir die PHP-Funktion mysqli_connect() auf. Auf diese Funktion kommt es an, denn sie stellt die Verbindung zum Datenbankserver her. Wir übergeben der Funktion die vier Variablen als Argumente in Klammern:
<?php
$host_name = 'HOSTNAME_EINTRAGEN';
$user_name = 'USERNAME_EINTRAGEN';
$password = 'PASSWORD_EINTRAGEN';
$database = 'DATENBANKNAME_EINTRAGEN';
$connect = mysqli_connect($host_name, $user_name, $password, $database);
?>
Die Funktion mysqli_connect() liefert als Rückgabewert eine Referenz auf die Verbindung. Diese Referenz ist sehr wichtig, denn wir brauchen sie immer, wenn wir eine SQL-Abfrage starten. Wir sollten sie daher für die weitere Verwendung in einer Variablen speichern ($connect).
Wenn sie PHP und MySQL lokal über XAMPP verwenden, ist der Standard-Hostname (sofern nicht anders belegt) ein leerer String '' oder localhost, der Standardbenutzer root und das Passwort ebenfalls ein leerer String ''.
SQL-Abfrage durchführen
Um unsere Verbindung zu testen, wollen wir eine einfache SQL-Abfrage für unsere Tabelle mitarbeiter ausführen. Mit der SQL-Abfrage SELECT * FROM Mitarbeiter können wir etwa alle Datensätze der Tabelle anzeigen lassen.
Doch wie bekommen wir das mit PHP auf die Reihe? 🤔
Ganz einfach: Wir benutzen die beiden Funktionen mysqli_query() und mysqli_fetch_assoc().
Schauen wir uns zunächst den kompletten Code mit Ausgabe im Browser an. Anschließend erklären wir alles Schritt für Schritt.
<?php
// Verbindung muss hergestellt sein (siehe Code oben)
$abfrage = "SELECT * FROM Mitarbeiter";
$result = mysqli_query($connect, $abfrage);
while($dsatz = mysqli_fetch_assoc($result)){
echo $dsatz["name"] . ", " .
$dsatz["vorname"] . ", " .
$dsatz["personalnummer"] . ", " .
$dsatz["gehalt"] . ", " .
$dsatz["geburtstag"] .
"
";
}
?>
und hier die Ausgabe im Browser:
Picard, Jean-Luc, 1234, 10000.00, 1988-10-03
Riker, William T., 2100, 7000.00, 1998-10-04
La Forge, Geordi, 2120, 5000.00, 1999-01-03
Troi, Deanna, 2730, 5000.00, 1997-12-20
Barclay, Reginald, 2777, 2000.00, 1997-03-21
Gehen wir nun die einzelnen Schritte nacheinander durch:
- Wir speichern als erstes die SQL-Abfrage, die wir durchführen wollen, als String in einer Variablen $abfrage.
- Nun rufen wir die Funktion mysqli_query() auf. Diese Funktion führt die SQL-Abfrage aus. Sie fordert zwei Parameter: Die Referenz auf die Verbindung sowie den SQL-Abfrage-String. Wir übergeben also $connect und $abfrage.
Wenn das funktioniert hat, liefert die Funktion eine Ergebniskennung auf die Abfrage zurück, die wir in der Variablen $result speichern. Die brauchen wir, um uns die Datensätze der SQL-Abfrage zu holen. - Wir verwenden jetzt die Funktion mysqli_fetch_assoc() und übergeben ihr die Variable $result als Argument. Gut aufpassen, jetzt wird's interessant:
Die Funktion mysqli_fetch_assoc() liefert in Kombination mit der while-Schleife alle Datensätze der SQL-Abfage nacheinander in mehreren assoziativen Arrays (hier: $dsatz) zurück.
Die Tabellen-Attribute (name, vorname usw.) stellen in jedem dieser Arrays die Schlüssel (keys) dar, mit denen wir die passenden Werte (values) ansteuern können. So passt etwa zum Schlüssel $dsatz["name"] des ersten Arrays der Wert Picard.
Die while-Schleife läuft solange, bis mysqli_fetch_assoc keinen Datensatz mehr liefert. Dann nämlich wird die Zuweisung $dsatz = mysqli_fetch_assoc($result) false und die Schleife endet. Da wir 5 Datensätze in unserer Beispieltabelle mitarbeiter haben, wird die while-Schleife also 5x durchlaufen und es werden 5 Arrays erstellt.
Keep in mind: Mit jedem Schleifendurchlauf wird ein neues assoziatives Array erstellt und das vorhergehende ist verloren. Die Variable $dsatz verweist also zu jedem Schleifendurchlauf auf ein anderes Array. Das bedeutet wiederum, dass wir jeden Datensatz nur innerhalb des jeweiligen Durchlaufs ("wenn es an der Reihe ist") verwenden.
Wir sollten am Ende noch die Verbindung zur Datenbank trennen. Dafür dient die Funktion mysqli_close($connect);
Zu guter Letzt noch der gesamte Code im Überblick:
<html><body>
<?php
//1. MySQL-Verbindung herstellen
$host_name = 'HOSTNAME_EINTRAGEN';
$user_name = 'USERNAME_EINTRAGEN';
$password = 'PASSWORD_EINTRAGEN';
$database = 'DATENBANKNAME_EINTRAGEN';
$connect = mysqli_connect($host_name, $user_name, $password, $database);
//2. Test-Abfrage durchführen
$abfrage = "SELECT * FROM Mitarbeiter";
$result = mysqli_query($connect, $abfrage);
while($dsatz = mysqli_fetch_assoc($result)){
echo $dsatz["name"] . ", " .
$dsatz["vorname"] . ", " .
$dsatz["personalnummer"] . ", " .
$dsatz["gehalt"] . ", " .
$dsatz["geburtstag"] .
"<br>";
}
// Verbindung trennen:
mysqli_close($connect);
?>
</body></html>
Übungen
einfach
Angenommen, Ihr MySQL-Datenbankserver hat folgende Zugangsdaten:
Hostname: db3215534
Benutzername: dbo13229
Passwort: pwX&%99
Name der Datenbank: DatenbankFuerFirma
Wie stellen Sie eine Verbindung zur Datenbank her?
mittel
Wir haben eine Tabelle, die programmierkurse heißt. Diese Tabelle hat folgende Spalten: id, titel, beschreibung, preis.
Wie müsste der PHP-Code aussehen, um alle Datensätze der Tabelle im Browser anzuzeigen?
schwer
Bilden Sie folgende MySQL-Tabelle nach bzw. importierten Sie diese (falke.sql).
+----+----------+-------------+-----------+
| id | name | rasse | alterTier |
+----+----------+-------------+-----------+
| 1 | Drago | Turmfalke | 12 |
| 2 | Merlin | Turmfalke | 10 |
| 3 | Redhead | Rotfußfalke | 5 |
| 4 | Lancelot | Silberfalke | 7 |
| 5 | Parzival | Buntfalke | 1 |
+----+----------+-------------+-----------+
Führen Sie nun eine MySQL-Abfrage durch, die alle Turmfalken am Bildschirm ausgibt, die älter sind als 4 Jahre.
Das Ergebnis soll unter einer h1-Überschrift und in einer einfachen HTML-Tabelle folgendermaßen angezeigt werden: