MB Dev .tech
Registrieren Login

PDO · Verbindung

← Zurück zu PHP & Datenbank

Bevor du SQL-Abfragen ausführen kannst, muss PHP eine Verbindung zur Datenbank aufbauen. Genau das macht PDO über ein PDO-Objekt. In diesem Modul lernst du, wie eine Verbindung aussieht, welche Teile wichtig sind und welche Einstellungen man in der Praxis fast immer setzt.

Merke
Ohne Verbindung keine Queries

PDO ist wie ein „Telefon“ zur Datenbank. Erst wenn die Leitung steht, kannst du Fragen stellen (SELECT) oder Dinge ändern (INSERT/UPDATE/DELETE).

1) DSN – was ist das?

Die Verbindung startet mit einem sogenannten DSN: Das ist ein Text, der beschreibt, welche Datenbank du ansprichst und wo sie erreichbar ist.

Für MySQL/MariaDB sieht das oft so aus:

DSN Beispiel

$dsn = "mysql:host=127.0.0.1;dbname=demo_db;charset=utf8mb4";
  • mysql: → Treiber/Typ der DB
  • host=... → Server/Hostname
  • dbname=... → Datenbank-Name
  • charset=utf8mb4 → Zeichensatz (wichtig für Umlaute/Emojis)
Tipp
utf8mb4 ist heute Standard

Damit funktionieren auch Emojis und viele Sonderzeichen korrekt. utf8 (ohne mb4) ist in MySQL historisch und kann je nach Setup limitiert sein.

2) Verbindung aufbauen: new PDO()

Das PDO-Objekt baust du so: DSN + Benutzername + Passwort + Optionen. Wenn etwas schiefgeht, sollte dein Code sauber reagieren.

PDO Verbindung (typisch)

$dsn  = "mysql:host=127.0.0.1;dbname=demo_db;charset=utf8mb4";
$user = "demo_user";
$pass = "demo_pass";

$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

$pdo = new PDO($dsn, $user, $pass, $options);

Diese Optionen sind sehr beliebt, weil sie typische Anfänger-Probleme vermeiden:

  • ERRMODE_EXCEPTION: Fehler werden als Exception geworfen (besser als „stumm“)
  • FETCH_ASSOC: Ergebnisse als Array mit Spaltennamen
  • EMULATE_PREPARES=false: echte Prepared Statements (wenn möglich)
Merke
Fehler „laut“ machen ist am Anfang hilfreich

Wenn PDO Fehler verschluckt, sitzt du ewig und weißt nicht, warum nichts klappt. Exceptions sind beim Lernen oft der beste Weg.

3) Was passiert bei Verbindungsfehlern?

Verbindung kann scheitern – z.B. falsches Passwort, DB down, falscher Host. Deshalb nutzt man häufig try/catch.

try/catch (vereinfacht)

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
    echo "Verbindung steht!";
} catch (PDOException $e) {
    // In echten Apps: keine Details an Benutzer ausgeben
    echo "Verbindung fehlgeschlagen.";
}
Achtung
Fehlermeldungen nicht öffentlich anzeigen

Die Exception kann Servernamen, User oder SQL verraten. In der Praxis loggt man Details intern und zeigt außen nur eine neutrale Meldung.

4) Wo gehören Zugangsdaten hin?

In Lernbeispielen stehen Benutzer/Passwort oft im Code. In echten Projekten sollten Zugangsdaten nicht „quer“ im Code verteilt sein.

  • Konfigurationsdatei (außerhalb vom Webroot)
  • Umgebungsvariablen (ENV)
  • Secrets/Config-Management (bei größeren Systemen)
Tipp
Ein zentraler DB-Connect spart Fehler

Wenn du die Verbindung zentral erstellst (ein Ort), hast du überall gleiche Optionen und weniger Chaos.

Wie geht es weiter?

Jetzt steht die Verbindung. Als Nächstes kommt der wichtigste Sicherheits- und Praxis-Teil: Prepared Statements. Damit arbeitest du sauber mit Platzhaltern und schützt deine Abfragen.

Nächster Schritt
Prepared Statements

Wir unterscheiden dabei auch: ? (positionale Platzhalter) vs. :name (benannte Platzhalter).