MB Dev .tech
Registrieren Login

PDO · Daten abrufen

← Zurück zu PHP & Datenbank

Nachdem eine Abfrage vorbereitet und ausgeführt wurde, willst du die Ergebnisse auch lesen. Genau dafür gibt es bei PDO die Methoden fetch() und fetchAll().

Merke
SQL fragt – PHP verarbeitet

Die Datenbank liefert Zeilen. PHP entscheidet, wie du sie weiter nutzt oder anzeigst.

1) fetch() – eine Zeile holen

fetch() gibt eine einzelne Zeile aus dem Ergebnis zurück. Ideal, wenn du genau einen Datensatz erwartest (z.B. Benutzer per ID).

fetch()

$sql  = "SELECT id, email FROM users WHERE id = :id";
$stmt = $pdo->prepare($sql);

$stmt->execute([
    ':id' => 1
]);

$row = $stmt->fetch();

if ($row !== false) {
    echo $row['email'];
}
Tipp
fetch() kann false zurückgeben

Wenn keine Zeile gefunden wurde, liefert fetch() false. Das sollte man immer abfangen.

2) fetchAll() – mehrere Zeilen holen

fetchAll() liefert alle Zeilen als Array zurück. Das nutzt man z.B. für Listen oder Tabellen.

fetchAll()

$sql  = "SELECT id, email FROM users";
$stmt = $pdo->query($sql);

$rows = $stmt->fetchAll();

foreach ($rows as $row) {
    echo $row['email'] . "<br>";
}
Achtung
fetchAll() kann viel Speicher brauchen

Bei sehr großen Ergebnismengen ist es besser, Zeile für Zeile mit fetch() zu arbeiten.

3) Fetch-Modi

PDO kann Ergebnisse in verschiedenen Formen liefern. Am häufigsten wird FETCH_ASSOC genutzt.

  • FETCH_ASSOC → Array mit Spaltennamen
  • FETCH_NUM → Array mit Zahlen-Indizes
  • FETCH_BOTH → beides (Standard)
Merke
FETCH_ASSOC ist am übersichtlichsten

Der Zugriff über Spaltennamen ist lesbarer und weniger fehleranfällig.

4) Typischer Ablauf (Merkkette)

  1. SQL schreiben
  2. prepare()
  3. execute()
  4. fetch() oder fetchAll()
Tipp
Diese Reihenfolge immer im Kopf behalten

Wenn etwas „nicht funktioniert“, liegt der Fehler oft an einem vergessenen Schritt.

Wie geht es weiter?

Als Nächstes schauen wir uns an, wie PDO mit Fehlern umgeht und wie man sie sauber behandelt.

Nächster Schritt
Fehler & Handling

Exceptions, Fehlermodi und saubere Trennung von Debug- und Produktivbetrieb.