Signatur
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
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);
?>
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.";
?>
// 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.