Folien



(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:

  • PDO
  • mysqli

Wir verwenden PDO, da wir vielleicht gelegentlich von MySQL auf SQLite umsteigen; das macht uns die PDO-Abstraktionsschicht einfacher.

Vorgehen

Zuerst definieren wir die Zugangsdaten; dann stellen wir über einen PHP-Befehl eine Verbindung her; schließlich fangen wir mögliche Fehler ab.

Vorbemerkung

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>  

Schritt 1: Zugangsdaten definieren

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'  

Schritt 2: Verbindung zum Server herstellen

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

Das Objekt bezeichnen wir bspw. als $verbindung; oft wird auch $pdo benutzt.
PHP-Code
  $verbindung = new PDO($serverdaten, $username, $passwort);  

Schritt 3: Mögliche Fehler abfangen

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-Code
  try { // 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-Code
  try { $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 }  

Übungen

Alle Übungen finden Sie in der Materialsammlung (dort auch alle zusätzlichen Dateien wie Bilder, Klassendiagramme oder HTML-Vorlagen!).

Die aktuelle Übung können Sie hier als txt-File herunterladen.


***** Übungen: PHP + MySQL - Verbindung zur Datenbank herstellen *****

Verbindung zur DB – fehlerhaftes Listing 1

Im folgenden Skript fehlen einige Anführungszeichen bzw. wurden falsch gesetzt. Fügen Sie sie ein und überprüfen Sie, ob es beim Ausführen des Skripts zu Fehlermeldungen oder Warnungen kommt.

--- PHP-Code Start ---
$db_server = localhost; // Host-Name
$db_user = root; // Benutzername
"$db_pass" = root; // Kennwort
"$db_name" = sqltest; // Name der Datenbank
--- Code Ende ---




Verbindung zur DB – fehlerhaftes Listing 2

Finden Sie die drei Fehler im folgenden Skript. Überprüfen Sie, ob es beim Ausführen des Skripts zu Fehlermeldungen oder Warnungen kommt.

--- PHP-Code Start ---
$username = 'root';
$passwort = 'root';
$host = localhost;
$db_name = 'wettdatenbank';
$serverdaten = "mysql:user=$username;password=$passwort";

$verbindung = new PDO($serverdaten, $username, $passwort);

try {
$verbindung = new PDO($serverdaten, $username, $passwort);
}
catch(Exception $fehler) {
print $fehler->getMessage();
}
--- Code Ende ---