博客首页|TW首页| 同事录|业界社区

屈伟

创业路上的程序猿

PHP对Berkeley DB游标遍历的方法

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 ++;
}

浏览数: 次 星期三, 02月 4th, 2009 PHP, 未分类
上一篇:卓越的营销

还没有评论。

发表评论