logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll

Arbeiten mit der Datenbank in Drupal 7 – Lektion 9 – Update-Abfragen (UPDATE)

26/05/2025, by Ivan

Update-Abfragen sollten immer den Query-Builder verwenden. Unterschiedliche Datenbanken haben spezifische Handler für LOBs (Large OBjects, z. B. TEXT in MySQL) und BLOB-Felder (Binary Large OBjects), daher ist eine Abstraktionsschicht für die individuellen Treiber notwendig, um die spezifischen Handler zu implementieren.

Update-Abfragen beginnen mit der Funktion db_update():

<?php
$query = db_update('node', $options);
?>

Mit diesem Update-Query-Objekt können eine oder mehrere Datensätze in der Tabelle node geändert werden. Beachten Sie, dass keine geschweiften Klammern um den Tabellennamen nötig sind, der Query-Builder erledigt das automatisch.

Das Update-Query-Objekt verwendet eine Fluent API. Das heißt, alle Methoden (außer execute()) geben das Query-Objekt zurück, sodass Methoden verketten möglich ist. Häufig wird das Query-Objekt daher nicht in einer Variablen gespeichert.

Update-Abfragen bestehen aus einer Menge Schlüssel-Wert-Paare, die mit Bedingungen via WHERE kombiniert werden. Die genaue Funktionsweise von WHERE wird in einer späteren Lektion erklärt. Hier nur ein Beispiel:

<?php
/* Dieses einfache Beispiel aktualisiert Datensätze in der Tabelle node */
$num_updated = db_update('node')
  ->fields(array(
    'uid' => 5,
    'status' => 1,
  ))
  ->condition('created', REQUEST_TIME - 3600, '>=')
  ->execute();
?>

Das Beispiel entspricht dem SQL-Befehl:

UPDATE {node} SET uid=5, status=1 WHERE created >= 1221717405;

Das Beispiel aktualisiert alle Einträge in node, die in der letzten Stunde erstellt wurden, und setzt uid auf 5 und status auf 1. Die Methode fields() erhält ein assoziatives Array mit den zu aktualisierenden Feldern und ihren neuen Werten. Im Unterschied zu Insert-Abfragen akzeptiert UpdateQuery::fields() nur assoziative Arrays. Die Reihenfolge der Felder im Array oder in den Methodenaufrufen ist dabei unerheblich.

Die Methode execute() gibt die Anzahl der tatsächlich geänderten Zeilen zurück. Beachten Sie, dass dies nicht unbedingt alle Zeilen sind, die die WHERE-Bedingung erfüllen. So werden beispielsweise Zeilen, bei denen uid=5 und status=1 bereits gesetzt sind, nicht als geändert gezählt. Daher spiegeln Update-Abfragen nicht immer exakt wider, wie viele Datensätze aktuell diese Werte haben.