(letzte Änderung an dieser Seite: 04.12.2020)
(letzte Synchronisation der PDF-Präsentation: 04.12.2020)
Falls keine PDF-Präsentation zu sehen ist, klicken Sie zum Download hier: Direktdownload PDF-Präsentation
Es gibt zwei Möglichkeiten, wie Sie von PHP aus eine Verbindung zu einer (in unserem Fall: MySQL- oder MariaDB-)Datenbank herstellen:
Wir verwenden PDO, da wir vielleicht gelegentlich von MySQL auf SQLite umsteigen; das macht uns die PDO-Abstraktionsschicht einfacher.
Zuerst definieren wir die Zugangsdaten; dann stellen wir über einen PHP-Befehl eine Verbindung her; schließlich fangen wir mögliche Fehler ab.
Den PHP-Code schreiben wir erst mal in die Seite, auf der das Formular eingebunden ist; später können wir das dann in andere Klassen auslagern.
PHP-Code<!DOCTYPE html> <html lang="de"> ... <body> <h1>Schülerwettbüro</h1> <?php $username = 'root'; ... ?> <form action="index.php" method="post"> ... ... </body> </html>
Wir brauchen:
Hostnamen / Servernamen (meistens: "localhost")
Name der Datenbank
Benutzername (bei lokalen Servern fast immer: "root")
Passwort (bei WAMP, xampp: "" (leer), bei MAMP: "root")
Am einfachsten speichern wir alle Zugangsdaten in Variablen; dann haben wir das an einer Stelle und können es bequem ändern/kontrollieren.
PHP-Code$servername = 'localhost'; $dbname = 'meineDatenbank'; $username = 'root'; $passwort = ''; // bei WAMP/xampp leer, bei MAMP (macOS) 'root'
Erst mal fassen wir die bekannten Serverdaten zusammen. Wir wissen: 1. Es ist eine MySQL-Datenbank. 2. Wir kennen den Servernamen. 3. Wir kennen den Namen der Datenbank.
PHP-Code$servername = 'localhost'; $dbname = 'meineDatenbank'; $username = 'root'; $passwort = ''; $serverdaten = "mysql:host=$servername;dbname=$dbname";
Weitere Parameter sind möglich, bspw. um die Zeichenkodierung festzulegen, wenn es bspw. Probleme mit Umlauten gibt:
PHP-Code$serverdaten = "mysql:host=$servername;dbname=$dbname;charset=utf8";
Um die Verbindung zum Server zu öffnen, legen wir einfach ein neues Objekt der Klasse PDO ("PHP Data Objects") an, das (in unserem Fall) drei Parameter bekommt:
- Server- und DB-Daten
- Username
- Passwort
$verbindung
; oft wird auch $pdo
benutzt.
PHP-Code$verbindung = new PDO($serverdaten, $username, $passwort);
Problem: Enthält der Verbindungsbefehl ($verbindung = new PDO…… // siehe oben
) einen Fehler (z.B. falsches Passwort), bricht das Skript ab und wir erfahren nicht, welcher Fehler es war (falsches Passwort? Falscher Benutzername? Keine Verbindung zur Datenbank? Etc.).
Deshalb müssen wir den Fehler ab"fangen" (catch).
PHP-Codetry { // PHP-Code } catch(Exception $einFehler) { // PHP-Code }
Wir umgeben den Verbindungsaufbau also mit einem try-catch-Block: Probiere xy, wenn es einen Fehler gibt, fange den ab und mache was anderes.
PHP-Codetry { $verbindung = new PDO($serverdaten, $username, $passwort); // wenn hier ein Fehler "geworfen" wird, spuck uns keine Fehlermeldungen um die Ohren, sondern führe den catch-Block aus } catch(Exception $fehler) // $fehler ist ein Objekt der Exception-Klasse. Exceptions enthalten genauere Informationen über den Fehler. // eigentlich präziser: catch(PDOException $fehler) { print $fehler->getMessage(); // Ausgabe der Fehlermeldung }