Start · Sprachen · PHP · Referenz · dbase_replace_record

dbase_replace_record

Funktion

Ersetzt einen vorhandenen Datensatz in einer dBASE-Datenbank durch neue Daten.

Kategorie: db

Signatur

dbase_replace_record(resource $database, array $data, int $record_number): bool

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

Typ
bool
Beschreibung
Gibt 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";
}
?>
Datensatz erfolgreich ersetzt.

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);
}
?>
Preisanpassung abgeschlossen.

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