09/11 26

PHP对Berkeley DB游标遍历的方法 不指定

jason , 12:05 , 我的收藏 » DB , 评论(0) , 引用(0) , 阅读(426) , Via 本站原创 | |
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 ++;
    }
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]