Signatur
Beschreibung
pg_delete() erzeugt und führt eine DELETE-Anweisung gegen eine PostgreSQL-Datenbank aus. Die zu löschenden Datensätze werden durch ein assoziatives Array ($conditions) bestimmt, dessen Schlüssel den Spaltennamen und dessen Werte den Vergleichswerten entsprechen. Alle Bedingungen werden intern mit AND verknüpft.
Die Funktion übernimmt automatisch das Escaping der übergebenen Werte, sofern das Flag PGSQL_DML_ESCAPE gesetzt ist, und schützt so vor SQL-Injection. Durch Übergabe von PGSQL_DML_STRING als $flags kann der erzeugte SQL-String zurückgegeben werden, ohne ihn auszuführen – praktisch zum Debuggen oder zum Weiterverwenden der Abfrage.
Die Funktion ist besonders nützlich, wenn Zeilen nach einfachen Gleichheitsbedingungen gelöscht werden sollen, ohne manuell eine DELETE-Anweisung formulieren zu müssen. Für komplexere Bedingungen (Bereiche, LIKE, Subabfragen) sollte hingegen pg_query_params() oder pg_prepare() verwendet werden.
- PGSQL_DML_EXEC – führt die erzeugte Abfrage direkt aus (Standard).
- PGSQL_DML_ASYNC – führt die Abfrage asynchron aus.
- PGSQL_DML_STRING – gibt den SQL-String zurück, anstatt ihn auszuführen.
- PGSQL_DML_ESCAPE – escaped Bezeichner und Werte zusätzlich.
- PGSQL_DML_NO_CONV – deaktiviert automatische Typkonvertierungen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | PgSql\Connection | Eine aktive PostgreSQL-Verbindungsinstanz, wie sie von pg_connect() oder pg_pconnect() zurückgegeben wird. |
|
| $table_name Pflicht | string | Name der Tabelle, aus der Datensätze gelöscht werden sollen. Der Name muss ein gültiger PostgreSQL-Bezeichner sein. | |
| $conditions Pflicht | array | Assoziatives Array mit Spaltenname-Wert-Paaren, die als WHERE-Bedingungen dienen. Alle Bedingungen werden mit AND verknüpft. |
|
| $flags | int | PGSQL_DML_EXEC | Kombinierbare Flags, z. B. PGSQL_DML_STRING, PGSQL_DML_ESCAPE, PGSQL_DML_NO_CONV, PGSQL_DML_ASYNC. Steuern das Verhalten der Funktion. |
Rückgabewert
true bei Erfolg zurück. Bei Angabe von PGSQL_DML_STRING wird der erzeugte SQL-String zurückgegeben. Im Fehlerfall wird false zurückgegeben.Beispiele
Einfaches Löschen eines Datensatzes anhand der ID
<?php
$conn = pg_connect('host=localhost dbname=shop user=app password=geheim');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
// Löscht alle Datensätze in 'orders', bei denen order_id = 42 und status = 'cancelled'
$conditions = [
'order_id' => 42,
'status' => 'cancelled',
];
$result = pg_delete($conn, 'orders', $conditions);
if ($result === true) {
echo 'Datensatz erfolgreich gelöscht.';
} else {
echo 'Fehler beim Löschen.';
}
pg_close($conn);
SQL-String vorab prüfen ohne Ausführung
<?php
$conn = pg_connect('host=localhost dbname=shop user=app password=geheim');
$conditions = [
'user_id' => 7,
'active' => false,
];
// Nur den SQL-String erzeugen, nicht ausführen
$sql = pg_delete($conn, 'sessions', $conditions, PGSQL_DML_STRING | PGSQL_DML_ESCAPE);
echo $sql;
// Ausgabe: DELETE FROM "sessions" WHERE "user_id" = '7' AND "active" = 'f'
pg_close($conn);
// Wichtig · Fallstricke
Sicherheit: Obwohl pg_delete() intern Escaping unterstützt, sollte zusätzlich das Flag PGSQL_DML_ESCAPE gesetzt werden, um Bezeichner und Werte zuverlässig zu escapen und SQL-Injection zu verhindern. Tabellennamen sollten niemals direkt aus Benutzereingaben stammen.
Bedingungen: Alle angegebenen Bedingungen werden ausschließlich mit AND und dem =-Operator verknüpft. Komplexere Filterlogik (OR, BETWEEN, LIKE, IS NULL) erfordert pg_query_params() mit vorbereiteten Anweisungen.
Hinweis: Wird kein passender Datensatz gefunden, gibt die Funktion trotzdem true zurück – die Anzahl betroffener Zeilen lässt sich mit pg_affected_rows() ermitteln, wenn man die Abfrage manuell über pg_query() ausführt.