Start · Sprachen · PHP · Referenz · dbase_get_record

dbase_get_record

Funktion

Liest einen einzelnen Datensatz aus einer dBase-Datenbank und gibt ihn als indiziertes Array zurück.

Kategorie: db

Signatur

dbase_get_record(resource $database, int $record): array|false

Beschreibung

dbase_get_record() gibt den Datensatz mit der angegebenen Datensatznummer aus einer geöffneten dBase-Datenbankdatei zurück. Die Felder des Datensatzes werden als numerisch indiziertes Array geliefert, wobei der erste Index 0 dem ersten Feld entspricht.

Am Ende des zurückgegebenen Arrays enthält das letzte Element einen booleschen Wert, der angibt, ob der Datensatz als gelöscht markiert ist (true = gelöscht). Dieser Wert kann genutzt werden, um logisch gelöschte Einträge zu erkennen, da dBase-Datenbanken Datensätze nicht sofort physisch entfernen.

Die Funktion ist besonders nützlich, wenn auf Legacy-Daten in .dbf-Dateien zugegriffen werden muss, etwa bei der Migration älterer Datenbestände oder bei der Integration mit Software, die noch auf dem dBase-Format basiert. Für einen assoziativen Zugriff über Feldnamen bietet sich alternativ dbase_get_record_with_names() an.

Achtung: Die dbase-Erweiterung ist veraltet und nicht Teil der PHP-Standardinstallation. Sie muss explizit kompiliert oder als PECL-Paket eingebunden werden.

Parameter

Name Typ Default Beschreibung
$database Pflicht resource Ein gültiger dBase-Datenbankressource-Handle, wie er von dbase_open() zurückgegeben wird.
$record Pflicht int Die 1-basierte Nummer des gewünschten Datensatzes. Der erste Datensatz hat die Nummer 1. Gültige Werte liegen zwischen 1 und dbase_numrecords($database).

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein numerisch indiziertes Array zurück, das die Feldwerte des Datensatzes enthält. Das letzte Element ist ein boolescher Wert, der angibt, ob der Datensatz als gelöscht markiert ist. Im Fehlerfall (z. B. ungültige Datensatznummer) wird false zurückgegeben.

Beispiele

Einzelnen Datensatz auslesen und anzeigen

<?php
// dBase-Datei öffnen (0 = Lesemodus)
$db = dbase_open('/var/data/adressen.dbf', 0);

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

// Ersten Datensatz lesen
$record = dbase_get_record($db, 1);

if ($record === false) {
    die('Datensatz nicht gefunden.');
}

// Lösch-Markierung ist das letzte Element
$deleted = array_pop($record);

if ($deleted) {
    echo 'Datensatz ist als gelöscht markiert.' . PHP_EOL;
} else {
    echo 'Felder des Datensatzes:' . PHP_EOL;
    foreach ($record as $index => $value) {
        echo "Feld $index: $value" . PHP_EOL;
    }
}

dbase_close($db);
?>
Felder des Datensatzes: Feld 0: Max Feld 1: Mustermann Feld 2: Berlin

Alle nicht gelöschten Datensätze iterieren

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

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

$anzahl = dbase_numrecords($db);

for ($i = 1; $i <= $anzahl; $i++) {
    $record = dbase_get_record($db, $i);

    if ($record === false) {
        continue;
    }

    // Letztes Element ist der Lösch-Marker
    $deleted = $record[count($record) - 1];

    if ($deleted) {
        // Überspringe gelöschte Datensätze
        continue;
    }

    // Index 0 = Artikelname, Index 1 = Preis (Beispiel)
    echo 'Artikel: ' . trim($record[0]) . ', Preis: ' . trim($record[1]) . PHP_EOL;
}

dbase_close($db);
?>
Artikel: Schraube M6, Preis: 0.15 Artikel: Dübel 8mm, Preis: 0.05

// Wichtig · Fallstricke

Veraltete Erweiterung: Die dbase-Erweiterung ist nicht mehr aktiv gepflegt und in modernen PHP-Installationen standardmäßig nicht verfügbar. Für neue Projekte sollten relationale Datenbanken (z. B. MySQL, PostgreSQL, SQLite) verwendet werden.

1-basierte Indizierung: Im Gegensatz zu den meisten PHP-Arrays beginnt die Datensatznummernzählung bei 1, nicht bei 0. Ein Aufruf mit $record = 0 liefert false.

Leerzeichen: Zeichenketten-Felder aus dBase-Dateien sind häufig mit Leerzeichen aufgefüllt. Es empfiehlt sich, die Werte mit trim() zu bereinigen.

Für einen komfortableren Zugriff über assoziative Feldnamen steht dbase_get_record_with_names() zur Verfügung.