Start · Sprachen · PHP · Referenz · dbase_delete_record

dbase_delete_record

Funktion

Markiert einen Datensatz in einer dBASE-Datenbankdatei als gelöscht, ohne ihn sofort physisch zu entfernen.

Kategorie: db

Signatur

dbase_delete_record(resource $database, int $record_number): bool

Beschreibung

dbase_delete_record() setzt das Lösch-Flag eines bestimmten Datensatzes in einer geöffneten dBASE-Datenbankdatei (.dbf). Der Datensatz wird dabei nicht sofort aus der Datei entfernt, sondern lediglich als gelöscht markiert. Dies entspricht dem typischen dBASE-Verhalten, bei dem gelöschte Datensätze erst durch einen expliziten Pack-Vorgang (z. B. dbase_pack()) endgültig aus der Datei entfernt werden.

Die Funktion ist Teil der dBASE-Erweiterung von PHP, die den Zugriff auf veraltete .dbf-Dateien ermöglicht. Sie eignet sich für die Migration von Legacy-Systemen oder für die Arbeit mit älteren Datenformaten, die noch im Einsatz sind.

Der Datensatz wird über seine 1-basierte Positionsnummer innerhalb der Datei adressiert. Nach dem Markieren als gelöscht ist er bei Lesevorgängen mit dbase_get_record() noch abrufbar, jedoch enthält der Datensatz dann den Eintrag deleted mit dem Wert 1.

Hinweis: Die dBASE-Erweiterung ist veraltet und wurde in Standard-PHP-Builds häufig nicht mitgeliefert. Sie muss ggf. separat kompiliert oder über PECL installiert werden.

Parameter

Name Typ Default Beschreibung
$database Pflicht resource Ein gültiges dBASE-Datenbankhandle, das zuvor mit dbase_open() oder dbase_create() geöffnet wurde.
$record_number Pflicht int Die 1-basierte Positionsnummer des Datensatzes, der als gelöscht markiert werden soll. Der erste Datensatz hat die Nummer 1.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Datensatz erfolgreich als gelöscht markiert wurde. Bei einem Fehler (z. B. ungültige Datensatznummer oder nicht beschreibbares Datenbankhandle) wird false zurückgegeben.

Beispiele

Datensatz als gelöscht markieren

<?php
// dBASE-Datei im Schreibmodus öffnen (Modus 2 = Lesen/Schreiben)
$db = dbase_open('/var/data/adressen.dbf', 2);

if ($db === false) {
    die('Datenbankdatei konnte nicht geöffnet werden.');
}

$recordNumber = 3; // Den dritten Datensatz löschen

if (dbase_delete_record($db, $recordNumber)) {
    echo "Datensatz #{$recordNumber} wurde als gelöscht markiert.";
} else {
    echo "Fehler: Datensatz konnte nicht gelöscht werden.";
}

// Gelöschte Datensätze physisch entfernen
dbase_pack($db);

dbase_close($db);
?>
Datensatz #3 wurde als gelöscht markiert.

Alle Datensätze mit bestimmtem Kriterium löschen

<?php
$db = dbase_open('/var/data/kunden.dbf', 2);

if ($db === false) {
    die('Fehler beim Öffnen der Datei.');
}

$anzahl = dbase_numrecords($db);
$geloescht = 0;

for ($i = 1; $i <= $anzahl; $i++) {
    $record = dbase_get_record_with_names($db, $i);
    // Datensätze löschen, die bereits als inaktiv markiert sind
    if (isset($record['STATUS']) && trim($record['STATUS']) === 'INAKTIV') {
        if (dbase_delete_record($db, $i)) {
            $geloescht++;
        }
    }
}

// Datenbank komprimieren, um gelöschte Einträge zu entfernen
dbase_pack($db);
dbase_close($db);

echo "{$geloescht} Datensätze wurden gelöscht und die Datenbank komprimiert.";
?>
5 Datensätze wurden gelöscht und die Datenbank komprimiert.

// Wichtig · Fallstricke

Veraltet/PECL: Die dBASE-Erweiterung ist nicht Bestandteil der Standard-PHP-Distribution. Sie muss über PECL installiert werden (pecl install dbase). In modernen PHP-Versionen (ab PHP 7+) steht sie nur eingeschränkt zur Verfügung.

Lösch-Flag: Das Markieren als gelöscht ist reversibel, solange dbase_pack() noch nicht aufgerufen wurde. Nach dem Pack-Vorgang sind die Datensätze unwiderruflich entfernt.

Datensatznummerierung: Die Nummerierung beginnt bei 1, nicht bei 0. Eine falsche Nummerierung führt zu false als Rückgabewert oder zum Löschen des falschen Datensatzes.

Dateimodus: Die dBASE-Datei muss mit Schreibzugriff (Modus 2) geöffnet worden sein, sonst schlägt die Operation fehl.