10.2. Using DBM Databases
Problem
You want a more stable and scalable way to store simple data than what text files offer.
Solution
Use the DBA abstraction layer to access a DBM-style database:
$dbh = dba_open('fish.db','c','gdbm') or die($php_errormsg);
// retrieve and change values
if (dba_exists('flounder',$dbh)) {
$flounder_count = dba_fetch('flounder',$dbh);
$flounder_count++;
dba_replace('flounder',$flounder_count, $dbh);
print "Updated the flounder count.";
} else {
dba_insert('flounder',1, $dbh);
print "Started the flounder count.";
}
// no more tilapia
dba_delete('tilapia',$dbh);
// what fish do we have?
for ($key = dba_firstkey($dbh); $key !== false; $key = dba_nextkey($dbh)) {
$value = dba_fetch($key, $dbh);
print "$key: $value\n";
}
dba_close($dbh);Discussion
PHP can support a few different kinds of DBM backends: GDBM, NDBM, DB2, DB3, DBM, and CDB. The DBA abstraction layer lets you use the same functions on any DBM backend. All these backends store key/value pairs. You can iterate through all the keys in a database, retrieve the value associated with a particular key, and find if a particular key exists. Both the keys and the values are strings.
The following program maintains a list of usernames and passwords in a DBM database. The username is the first command-line argument, and the password is the second argument. If the given username already exists in the database, the password is changed to the given password; otherwise the user and password combination are ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access