Signatur
Beschreibung
pg_update() führt ein UPDATE-Statement auf einer PostgreSQL-Tabelle aus. Die zu setzenden Spaltenwerte werden im Array $values übergeben, die Filterbedingungen im Array $conditions – beide als assoziative Arrays der Form ['spalte' => wert]. Die Funktion übernimmt intern die nötige Escapierung der Werte und schützt so vor SQL-Injection.
Der Parameter $flags steuert das Verhalten: Mit PGSQL_DML_EXEC (Standard) wird die Abfrage sofort ausgeführt. Mit PGSQL_DML_STRING wird stattdessen das erzeugte SQL als String zurückgegeben, ohne es auszuführen – nützlich für Debugging oder Logging. PGSQL_DML_NO_CONV deaktiviert die automatische Typkonvertierung der Werte.
Intern erzeugt pg_update() eine parametrisierte Abfrage, sodass die Werte sicher an die Datenbank übergeben werden. Die Funktion eignet sich besonders für einfache Update-Operationen ohne komplexe JOIN-Klauseln oder Sub-Selects. Für komplexere Abfragen sollte stattdessen pg_query_params() verwendet werden.
Es ist wichtig zu beachten, dass $conditions nur mit AND-verknüpften Gleichheitsbedingungen arbeitet. Für OR-Verknüpfungen, Vergleichsoperatoren oder komplexe WHERE-Klauseln muss das SQL manuell mit pg_query_params() geschrieben werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | PgSql\Connection | Eine aktive PostgreSQL-Datenbankverbindung, die z. B. mit pg_connect() oder pg_pconnect() erstellt wurde. |
|
| $table_name Pflicht | string | Name der Tabelle, in der Zeilen aktualisiert werden sollen. Der Name wird nicht automatisch escapiert – vertrauenswürdige, fest kodierte Tabellennamen verwenden. | |
| $values Pflicht | array | Assoziatives Array der Form ['spaltenname' => neuer_wert]. Diese Werte werden in den SET-Teil des UPDATE-Statements eingetragen und sicher escapiert. |
|
| $conditions Pflicht | array | Assoziatives Array der Form ['spaltenname' => bedingungswert]. Alle Einträge werden per AND verknüpft und bilden die WHERE-Klausel des Statements. |
|
| $flags | int | PGSQL_DML_EXEC | Steuert das Verhalten der Funktion. Mögliche Werte: PGSQL_DML_EXEC (Abfrage ausführen), PGSQL_DML_STRING (SQL-String zurückgeben ohne Ausführung), PGSQL_DML_NO_CONV (keine automatische Typkonvertierung), PGSQL_DML_ESCAPE (Werte escapen statt Parameter verwenden). |
Rückgabewert
true zurück, wenn das Update erfolgreich ausgeführt wurde, oder false bei einem Fehler. Wenn PGSQL_DML_STRING als Flag übergeben wird, wird stattdessen das erzeugte SQL als string zurückgegeben.Beispiele
Einfaches Update eines Benutzerdatensatzes
<?php
$conn = pg_connect('host=localhost dbname=mydb user=myuser password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
// E-Mail-Adresse des Benutzers mit ID 42 aktualisieren
$values = ['email' => 'neu@example.com', 'updated_at' => date('Y-m-d H:i:s')];
$conditions = ['id' => 42];
$result = pg_update($conn, 'users', $values, $conditions);
if ($result === true) {
echo 'Datensatz erfolgreich aktualisiert.';
} else {
echo 'Fehler beim Aktualisieren.';
}
pg_close($conn);
SQL-String zur Überprüfung ausgeben ohne Ausführung
<?php
$conn = pg_connect('host=localhost dbname=mydb user=myuser password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
$values = ['status' => 'inactive'];
$conditions = ['last_login' => '2020-01-01', 'role' => 'guest'];
// Nur SQL generieren, nicht ausführen
$sql = pg_update($conn, 'users', $values, $conditions, PGSQL_DML_STRING);
echo $sql;
pg_close($conn);
// Wichtig · Fallstricke
Sicherheit – Tabellenname: Der $table_name wird von pg_update() nicht escapiert. Tabellenname darf niemals aus Benutzereingaben stammen; ausschließlich fest kodierte, vertrauenswürdige Namen verwenden.
Sicherheit – Werte: Die Werte in $values und $conditions werden intern sicher behandelt (escapiert oder als Parameter übergeben), sodass SQL-Injection durch diese Arrays nicht möglich ist.
Leere Bedingungen: Wird ein leeres Array als $conditions übergeben, wird kein WHERE erzeugt – was alle Zeilen der Tabelle aktualisiert. Unbedingt sicherstellen, dass das Conditions-Array mindestens einen Eintrag enthält.
Komplexe Abfragen: pg_update() unterstützt nur einfache AND-Gleichheitsbedingungen. Für OR-Verknüpfungen, Bereichsabfragen oder JOINs sollte pg_query_params() mit einem manuell erstellten SQL-Statement verwendet werden.