Start · Sprachen · PHP · Referenz · dba_insert

dba_insert

Funktion

Fügt einen neuen Schlüssel-Wert-Eintrag in eine geöffnete DBA-Datenbank ein, ohne einen vorhandenen Schlüssel zu überschreiben.

seit PHP 4.0.0 Kategorie: db

Signatur

dba_insert(string $key, string $value, Dba\Connection|resource $dba): bool

Beschreibung

dba_insert schreibt einen neuen Datensatz mit dem angegebenen Schlüssel und Wert in eine DBA-Datenbank (Database Abstraction Layer). Wichtig: Existiert der Schlüssel bereits, schlägt die Funktion fehl und gibt false zurück, ohne den vorhandenen Wert zu überschreiben. Um einen bestehenden Eintrag zu aktualisieren oder neu anzulegen, sollte stattdessen dba_replace verwendet werden.

DBA ist PHPs Schnittstelle zu einfachen dateibasierten Schlüssel-Wert-Datenbanken wie dbm, ndbm, gdbm, Berkeley DB oder cdb. Die Datenbank muss zuvor mit dba_open oder dba_popen im Schreibmodus (z. B. 'c', 'n' oder 'w') geöffnet worden sein.

Die Funktion eignet sich besonders dann, wenn sichergestellt werden soll, dass kein bereits vorhandener Datensatz unbeabsichtigt überschrieben wird – etwa beim erstmaligen Befüllen einer Datenbank oder beim Importieren von Datensätzen, bei denen Duplikate erkannt werden sollen.

Parameter

Name Typ Default Beschreibung
$key Pflicht string Der eindeutige Schlüssel des einzufügenden Eintrags. Existiert dieser Schlüssel bereits in der Datenbank, gibt die Funktion false zurück.
$value Pflicht string Der Wert, der dem Schlüssel zugeordnet und in der Datenbank gespeichert werden soll.
$dba Pflicht Dba\Connection|resource Das DBA-Datenbankhandle, das von dba_open oder dba_popen zurückgegeben wurde. Ab PHP 8.4 ist dies ein Dba\Connection-Objekt, in älteren Versionen ein resource.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Eintrag erfolgreich eingefügt wurde. Gibt false zurück, wenn der Schlüssel bereits existiert oder ein Fehler aufgetreten ist.

Beispiele

Einfaches Einfügen eines neuen Eintrags

<?php
// Datenbank im Erstellungs-/Schreibmodus öffnen
$db = dba_open('/tmp/testdb.db', 'c', 'gdbm');

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

// Neuen Eintrag einfügen
if (dba_insert('benutzername', 'max.mustermann', $db)) {
    echo "Eintrag erfolgreich eingefügt.\n";
} else {
    echo "Einfügen fehlgeschlagen (Schlüssel existiert möglicherweise bereits).\n";
}

dba_close($db);
?>
Eintrag erfolgreich eingefügt.

Duplikat-Erkennung beim Einfügen

<?php
$db = dba_open('/tmp/userdb.db', 'c', 'gdbm');

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

$schluessel = 'user_42';
$wert = 'Anna Beispiel';

// Ersten Eintrag einfügen
if (dba_insert($schluessel, $wert, $db)) {
    echo "Erster Eintrag gespeichert.\n";
} else {
    echo "Erster Eintrag konnte nicht gespeichert werden.\n";
}

// Versuch, denselben Schlüssel erneut einzufügen
if (!dba_insert($schluessel, 'Anderer Name', $db)) {
    echo "Einfügen fehlgeschlagen: Schlüssel '{$schluessel}' existiert bereits.\n";
    // Vorhandenen Wert auslesen
    echo 'Vorhandener Wert: ' . dba_fetch($schluessel, $db) . "\n";
}

dba_close($db);
?>
Erster Eintrag gespeichert. Einfügen fehlgeschlagen: Schlüssel 'user_42' existiert bereits. Vorhandener Wert: Anna Beispiel

// Wichtig · Fallstricke

Schreibmodus erforderlich: Die Datenbank muss mit einem Schreibmodus geöffnet sein ('c', 'n' oder 'w'). Bei einem reinen Lesemodus ('r') schlägt dba_insert fehl.

Kein Überschreiben: Im Gegensatz zu dba_replace überschreibt dba_insert niemals einen vorhandenen Schlüssel. Soll ein Eintrag angelegt oder aktualisiert werden, ist dba_replace die richtige Wahl.

Dateiberechtigungen: Bei dateibasierten DBA-Backends muss das PHP-Prozess-Konto Schreibrechte auf die Datenbankdatei und das übergeordnete Verzeichnis besitzen.

PHP 8.4: Ab PHP 8.4 wird das Datenbankhandle als Dba\Connection-Objekt statt als resource zurückgegeben. Der Code bleibt aber weitgehend kompatibel.