Skip to main content

Das Thema Platzhalter haben wir bereits besprochen. Hier soll es nun um eine sehr nützliche Methode gehen, die uns dabei hilft, Platzhalter einfacher zu verwenden: bindValue()

Wie die Methode $sth->bindValue(":" . $param, $value); funktioniert

Analysieren wir diese Zeile Code im Detail. Sie wird oft in Schleifen oder in selbstgebauten Query-Buildern verwendet, um dynamisch Parameter zu binden.

Nehmen wir an, du hast folgende Variablen:

PHP

$param = 'id';
$value = 123;

Und dein Statement-Objekt $sth enthält die vorbereitete Abfrage SELECT * FROM listings WHERE id = :id.

Wenn du nun den Code aufrufst:

$sth->bindValue(„:“ . $param, $value);

Passiert folgendes, Schritt für Schritt:

  1. ":" . $param (Der Platzhalter-Name):
    • Zuerst wird der String für den Platzhalter-Namen zusammengebaut.
    • PHP nimmt den String ":" und hängt den Inhalt der Variable $param (also den String 'id') daran an.
    • Das Ergebnis ist der String ":id".
  2. $value (Der zu bindende Wert):
    • Die Variable $value enthält den Wert, den wir sicher an die Datenbank übergeben wollen. In diesem Fall ist das die Zahl 123.
  3. $sth->bindValue(...) (Die Aktion):
    • Die bindValue()-Methode wird auf dem PDOStatement-Objekt ($sth) aufgerufen.
    • Sie nimmt den ersten Parameter (":id") und sucht in der vorbereiteten SQL-Schablone nach einer Lücke mit genau diesem Namen. Sie findet sie: ... WHERE id = :id.
    • Jetzt nimmt sie den zweiten Parameter (123) und bindet diesen Wert an die gefundene Lücke. Sie macht quasi ein „Foto“ vom aktuellen Wert 123 und merkt sich: „Wenn execute() aufgerufen wird, muss an die Stelle :id der Wert 123 eingesetzt werden.“

Zusammengefasst: Diese Zeile ist eine dynamische Art zu sagen: „Binde den Wert aus der Variable $value an den Platzhalter, dessen Name sich aus dem String ":" und dem Inhalt der Variable $param zusammensetzt.“

 

Ein praktischer Anwendungsfall

 

Stell dir vor, du möchtest eine UPDATE-Anweisung dynamisch bauen:

PHP

$fields = [
    'title' => 'Neuer Titel',
    'city' => 'Berlin'
];
$id = 1;

$sql = "UPDATE listings SET title = :title, city = :city WHERE id = :id";
$sth = $pdo->prepare($sql);

// Binde die dynamischen Felder
foreach ($fields as $key => $value) {
    $sth->bindValue(":" . $key, $value); // Hier wird :title und :city gebunden
}

// Binde die ID
$sth->bindValue(":id", $id);

// Führe alles aus
$sth->execute();

Hier siehst du, wie die dynamische Natur von ":" . $key es dir erlaubt, mit einer Schleife flexibel eine beliebige Anzahl von Parametern sicher an dein Statement zu binden.

Leave a Reply