Signatur
Beschreibung
dbase_get_record_with_names() liest einen bestimmten Datensatz aus einer geöffneten dBase-Datenbankdatei (.dbf) und gibt ihn als assoziatives Array zurück. Im Gegensatz zu dbase_get_record(), das numerisch indizierte Arrays liefert, verwendet diese Funktion die tatsächlichen Feldnamen der Datenbank als Array-Schlüssel, was den Code deutlich lesbarer und wartungsfreundlicher macht.
Das zurückgegebene Array enthält zusätzlich den Schlüssel deleted, der angibt, ob der Datensatz als gelöscht markiert ist (1) oder nicht (0). Gelöschte Datensätze werden in dBase-Dateien nicht sofort physisch entfernt, sondern lediglich markiert.
Die Funktion eignet sich besonders dann, wenn Feldnamen nicht im Voraus bekannt sind oder wenn man direkt über sprechende Bezeichner auf Felder zugreifen möchte, ohne zunächst dbase_get_header_info() aufrufen zu müssen.
Hinweis: Die dBase-Erweiterung ist nicht standardmäßig aktiv und muss bei Bedarf kompiliert oder als PECL-Paket eingebunden werden. Sie gilt als veraltet und sollte in neuen Projekten durch modernere Datenbanklösungen ersetzt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $database Pflicht | resource | Ein gültiges Datenbank-Handle, das zuvor mit dbase_open() geöffnet wurde. |
|
| $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 der Gesamtzahl der Datensätze (ermittelbar mit dbase_numrecords()). |
Rückgabewert
deleted (Wert 0 oder 1). Im Fehlerfall (z. B. ungültige Datensatznummer) wird false zurückgegeben.Beispiele
Einzelnen Datensatz mit Feldnamen ausgeben
<?php
// dBase-Datei öffnen (nur lesend, Modus 0)
$db = dbase_open('/var/data/kunden.dbf', 0);
if ($db) {
$anzahl = dbase_numrecords($db);
echo "Anzahl Datensätze: $anzahl\n";
// Ersten Datensatz lesen
$datensatz = dbase_get_record_with_names($db, 1);
if ($datensatz !== false) {
// Gelöscht-Status prüfen
if ($datensatz['deleted']) {
echo "Datensatz ist als gelöscht markiert.\n";
} else {
echo "Name: " . trim($datensatz['NAME']) . "\n";
echo "Stadt: " . trim($datensatz['STADT']) . "\n";
echo "PLZ: " . trim($datensatz['PLZ']) . "\n";
}
}
dbase_close($db);
} else {
echo "Fehler beim Öffnen der Datenbankdatei.\n";
}
?>
Alle nicht-gelöschten Datensätze iterieren
<?php
$db = dbase_open('/var/data/artikel.dbf', 0);
if ($db) {
$anzahl = dbase_numrecords($db);
for ($i = 1; $i <= $anzahl; $i++) {
$row = dbase_get_record_with_names($db, $i);
if ($row === false) {
continue;
}
// Gelöschte Datensätze überspringen
if ($row['deleted']) {
continue;
}
printf(
"Artikel-Nr: %s | Bezeichnung: %s | Preis: %.2f\n",
trim($row['ARTNR']),
trim($row['BEZEICHNG']),
(float) $row['PREIS']
);
}
dbase_close($db);
}
?>
// Wichtig · Fallstricke
Veraltete Erweiterung: Die dBase-Erweiterung ist seit PHP 5 als PECL-Paket ausgelagert und wird in modernen Projekten nicht empfohlen. Für neue Anwendungen sollten relationale Datenbanken (MySQL, PostgreSQL, SQLite) verwendet werden.
Feldnamen: dBase-Feldnamen sind auf 10 Zeichen begrenzt und werden häufig in Großbuchstaben gespeichert. Die Array-Schlüssel spiegeln genau diese Namen wider. Zeichenkettenwerte enthalten oft abschließende Leerzeichen, die mit trim() entfernt werden sollten.
Datensatznummern: Die Nummerierung beginnt bei 1, nicht bei 0. Eine ungültige Nummer (kleiner als 1 oder größer als die Gesamtanzahl) führt zu einer PHP-Warnung und einem Rückgabewert von false.