Signatur
Beschreibung
dbase_replace_record() überschreibt einen bestehenden Datensatz in einer dBASE-Datenbankdatei (.dbf) vollständig mit den übergebenen Daten. Der Datensatz wird durch seine 1-basierte Position ($record_number) identifiziert.
Das Array $data muss für jedes Feld der Datenbank einen Wert in der richtigen Reihenfolge enthalten – analog zur Felddefinition der Datei. Die Anzahl der Elemente im Array muss exakt der Anzahl der Felder in der Datenbank entsprechen.
Die Funktion ist Teil der dBASE-Erweiterung (ext/dbase), die hauptsächlich für die Arbeit mit Legacy-Daten im dBASE-III/IV-Format (z. B. aus alten Buchhaltungssystemen oder GIS-Anwendungen) genutzt wird. Sie ist nicht für neue Projekte empfohlen; für relationale Datenbanken sollte stattdessen PDO oder MySQLi verwendet werden.
Wichtig: Die dBASE-Erweiterung ist in PHP 5 als PECL-Paket verfügbar und wurde in PHP 7.0 aus dem Kern entfernt. Sie ist weiterhin als PECL-Erweiterung (pecl/dbase) erhältlich.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $database Pflicht | resource | Ein gültiges dBASE-Datenbankhandle, das zuvor mit dbase_open() geöffnet wurde. Die Datei muss mit Schreibzugriff geöffnet worden sein. |
|
| $data Pflicht | array | Ein indiziertes Array mit den neuen Feldwerten. Die Reihenfolge der Werte muss der Feldreihenfolge der Datenbank entsprechen. Die Anzahl der Einträge muss exakt der Feldanzahl der Datenbank entsprechen. | |
| $record_number Pflicht | int | Die 1-basierte Position des zu ersetzenden Datensatzes in der Datenbank. Der erste Datensatz hat den Index 1. |
Rückgabewert
true zurück, wenn der Datensatz erfolgreich ersetzt wurde, andernfalls false (z. B. wenn $record_number außerhalb des gültigen Bereichs liegt oder die Datei nicht beschreibbar ist).Beispiele
Einen Datensatz in einer dBASE-Datei aktualisieren
<?php
// Datenbank im Lese-/Schreibmodus öffnen (Modus 2)
$db = dbase_open('/var/data/kunden.dbf', 2);
if ($db) {
// Datensatz Nr. 3 abrufen, um die aktuelle Struktur zu sehen
$aktuell = dbase_get_record($db, 3);
print_r($aktuell);
// Neuen Datensatz zusammenstellen (Reihenfolge: NAME, ORT, PLZ)
$neueDaten = [
'Max Mustermann',
'Berlin',
'10115'
];
// Datensatz Nr. 3 ersetzen
if (dbase_replace_record($db, $neueDaten, 3)) {
echo "Datensatz erfolgreich ersetzt.\n";
} else {
echo "Fehler beim Ersetzen des Datensatzes.\n";
}
dbase_close($db);
} else {
echo "Datenbank konnte nicht geöffnet werden.\n";
}
?>
Alle Datensätze durchlaufen und bestimmte aktualisieren
<?php
$db = dbase_open('/var/data/artikel.dbf', 2);
if ($db) {
$anzahl = dbase_numrecords($db);
for ($i = 1; $i <= $anzahl; $i++) {
$datensatz = dbase_get_record_with_names($db, $i);
// Nur aktive, nicht gelöschte Datensätze bearbeiten
if (!$datensatz['deleted'] && $datensatz['KATEGORIE'] === 'A') {
// Preis um 10 % erhöhen
$neuerPreis = number_format($datensatz['PREIS'] * 1.10, 2, '.', '');
$neuerDatensatz = [
$datensatz['ARTNR'],
$datensatz['BEZEICHNUNG'],
$datensatz['KATEGORIE'],
$neuerPreis
];
dbase_replace_record($db, $neuerDatensatz, $i);
}
}
echo "Preisanpassung abgeschlossen.\n";
dbase_close($db);
}
?>
// Wichtig · Fallstricke
Deprecation / Verfügbarkeit: Die dbase-Erweiterung wurde in PHP 5.3 als veraltet markiert und in PHP 7.0 aus dem PHP-Core entfernt. Sie ist weiterhin als PECL-Paket (pecl install dbase) verfügbar. Für neue Projekte sollten moderne Datenbankschnittstellen wie PDO verwendet werden.
Feldreihenfolge beachten: Das Daten-Array muss exakt die richtige Anzahl von Werten in der richtigen Reihenfolge enthalten. Es empfiehlt sich, zuvor mit dbase_get_record_with_names() die Struktur zu prüfen, um sicherzustellen, dass die Zuordnung korrekt ist.
Gelöschte Datensätze: dBASE markiert gelöschte Datensätze nur als gelöscht, entfernt sie aber nicht physisch. Beim Ersetzen sollte geprüft werden, ob der Datensatz mit dem Flag deleted markiert ist, um unerwartetes Verhalten zu vermeiden.