Start · Sprachen · PHP · Referenz · pg_update

pg_update

Funktion

Aktualisiert Zeilen in einer PostgreSQL-Tabelle anhand von Bedingungen und gibt bei Erfolg <code>true</code> zurück.

seit PHP 4.3.0 Kategorie: db

Signatur

pg_update(PgSql\Connection $connection, string $table_name, array $values, array $conditions, int $flags = PGSQL_DML_EXEC): string|bool

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

Typ
string|bool
Beschreibung
Gibt 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);
Datensatz erfolgreich aktualisiert.

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);
UPDATE "users" SET "status" = E'inactive' WHERE "last_login" = E'2020-01-01' AND "role" = E'guest'

// 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.