PHP操作Berkeley DB有两种方法,一是通过DBA系列函数来实现,具体看php手册dba_open,二是直接通过使用Berkeley DB自带的PHP API。 安装Berkeley DB的PHP扩展的方法可以看这篇博客。
我现在遇到了一个问题,需要对bdb的数据list出来。如果用dba_open里面提供了list方法。用DB4只能用游标。Berkeley DB官方提供的PHP API里,游标的函数:
class Db4Txn { function abort() {} function commit() {} function discard() { function id() {} function set_timeout($timeout, $flags = 0) {} }
直接调用get方法报错,跟C的api对比了下,发现php的手册提供的函数少了一个参数。
设置游标起始位置,$key 是bdb key-value中的key, $val 可以为空
$cursor->get($key, $val, DB_SET); //设置游标的起始位置
遍历数据库:
while( 0 === $cursor->get($key, $val, DB_NEXT) ) { echo $key, " => ", $val, " \r\n";}
完整的php操作bdb和游标使用实例如下:
$dbenv = new Db4Env();
$dbenv->set_data_dir(”/data/www/cp/tmpdb4/”);
$dbenv->open(”/data/www/cp/tmpdb4/”);$db = new Db4($dbenv);
$db->open(null, ‘fileName2′, ‘ddb_name2′);
$counter = $db->get(”counter”);
print “Current value of counter is $counter\n”;
$db->put(”counter”, $counter+1);for($i=0; $i<1000; $i++ ) {
$db->put(md5($i), “i: $i date:”.date(”Y-m-d H:i:s”).” - md5:”.md5($i) );
}$i = 300;
$key = md5($i);$cursor = $db->cursor(); //游标
$cursor->get($key, $val, DB_SET); //设置游标的起始位置
$k = 0;
while( 0 === $cursor->get($key, $val, DB_NEXT) ) { //遍历
echo $k, “, “, $key, ” => “, $val, ” \r\n”;
$k ++;
}
还没有评论。
| 一 | 二 | 三 | 四 | 五 | 六 | 日 |
|---|---|---|---|---|---|---|
| « May | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | |||