MB Dev .tech
Registrieren Login

PDO · Prepared Statements

← Zurück zu PHP & Datenbank

Prepared Statements sind eines der wichtigsten Konzepte beim Arbeiten mit Datenbanken in PHP. Sie sorgen für Sicherheit, saubere Trennung von Code und Daten und machen SQL-Abfragen robuster.

Merke
SQL und Benutzereingaben gehören nie zusammengeklebt

Prepared Statements verhindern, dass Benutzereingaben den Aufbau deiner SQL-Abfrage verändern können.

1) Warum braucht man Prepared Statements?

Ein häufiger Anfängerfehler ist, SQL-Abfragen per String zusammenzubauen:

Unsicheres Beispiel

$username = $_POST['username'];

$sql = "SELECT * FROM users WHERE username = '$username'";

Das ist gefährlich, weil der Inhalt von $username den SQL-Befehl verändern könnte (SQL-Injection).

Achtung
Escaping allein reicht nicht

Selbst wenn du Anführungszeichen „entschärfst“, bleibt das Grundproblem bestehen. Die Lösung heißt: Prepared Statements.

2) Die Grundidee von Prepared Statements

Bei Prepared Statements trennst du:

  • SQL-Struktur (der Befehl selbst)
  • Daten (die Werte)

Die Daten werden erst später eingesetzt und können den SQL-Befehl nicht mehr verändern.

3) Positionale Platzhalter (?)

Die einfachste Form nutzt Fragezeichen als Platzhalter. Die Werte werden später in der richtigen Reihenfolge übergeben.

Positionale Platzhalter

$sql  = "SELECT * FROM users WHERE email = ?";
$stmt = $pdo->prepare($sql);

$stmt->execute([
    "test@example.com"
]);
Merke
Reihenfolge ist entscheidend

Der erste Wert im Array gehört zum ersten ?, der zweite zum zweiten usw.

4) Benannte Platzhalter (:name)

Oft besser lesbar sind benannte Platzhalter. Hier bekommen die Platzhalter einen Namen.

Benannte Platzhalter

$sql = "
    SELECT *
    FROM users
    WHERE email = :email
";

$stmt = $pdo->prepare($sql);

$stmt->execute([
    ':email' => 'test@example.com',
]);
Tipp
Benannte Platzhalter sind wartungsfreundlich

Gerade bei vielen Parametern ist sofort klar, welcher Wert wofür gedacht ist.

5) Was PDO intern für dich erledigt

  • Automatisches korrektes Escaping
  • Trennung von SQL und Daten
  • Schutz vor SQL-Injection
  • Bessere Performance bei wiederholten Abfragen
Merke
Prepared Statements sind Standard, kein Extra

In modernen PHP-Anwendungen gibt es praktisch keinen Grund, auf Prepared Statements zu verzichten.

Wie geht es weiter?

Jetzt weißt du, wie Abfragen sicher vorbereitet werden. Im nächsten Schritt schauen wir uns an, wie man Ergebnisse aus der Datenbank abruft und verarbeitet.

Nächster Schritt
Daten abrufen (fetch)

fetch(), fetchAll() und Fetch-Modi wie FETCH_ASSOC stehen dort im Fokus.