首页  > 计算机 >

Txt DB Api – 一个蛮不错的PHP文本数据库

本文按署名·非商业用途·保持一致授权
作者:  ,发表于2005年11月25日02时31分 

Txt DB API是一个基于SQL语法的文本数据库。这个文本数据库仅支持最基本的数据库操作和少量的函数,如果你想使用如MYSQL中那么丰富的函数,Txt DB API并不适合你。但是如果你想构建一些比较简单的基于文本的PHP程序,Txt DB API会让你的开发更加轻松愉快。

Txt DB API最吸引人的是,它支持PEAR::DB这个强大的数据库抽象类。熟悉PEAR::DB的朋友就可以免去阅读Txt DB API文档的工序了。
当然,不想用PEAR::DB的话,可以使用TxtDBapi本身的数据库类。

TXT DB API本身的数据库类只有两个。
class Database;//用来连接数据库和执行语句
class ResultSet;//操作返回结果

例子(database1为数据库名,table1为其中的一个表)

使用PEAR::DB:
$DB=DB::connect("txtdbapi://localhost/database1");//连接TXT DB,并返回一个数据库对象
$DB->query("insert into table1 (name,blog) values ('surfchen','http://www.surfchen.org')");//插入一条数据
$people=$db->getAll("select * from table1");//返回一个包含所有结果的数组

不使用PEAR::DB:
$DB = new Database("database1");
$DB->executeQuery("insert into table1 (name,blog) values ('surfchen','http://www.surfchen.org')");//插入一条数据

推荐大家使用结合PEAR::DB使用这个文本数据库。这样可以获得PEAR提供的各种强大的功能,例如错误报告。

需要提醒的是,
在Txt DB API里有一句这样的话:“There are still many errors in this programm and the documentation!”。

我在寻找Txt DB过程中,还发现了一个国人开发的文本数据库 – txtdb。比上面的TXT DB API更简单,只有一个类。
这个数据库不支持SQL语法,也没有自增字段等功能,不支持PEAR::DB.
支持缓存。

虽然从感情上支持国人开发的TXT DB,但是个人觉得还是TXT DB API比较好。

顺便说一下,基于 XQUERY的 eXist数据库也在进行当中。不过这个不是基于文本的,必须安装它的数据库软件。可以通过eXist的沙盒(还是AJAX的呢,呵呵)看看查询语句和效果。



18个评论

  1. ep:

    TXT DB API 我看过。
    从sql解析到文本处理,速度不是很理想。
    所以就做了txtdb.

    txtdb 如果有字段名为id的话,是支持自增的。

    小应用怎么都可以。
    大了的话,还是数据库好。

  2. dfsdf:

    ghgjhgjhg中

  3. fmfsaisai:

    to:upstairs
    test spam?

  4. xieguolun:

    $rs=$sql->executeQuery(“insert into user (name,namepass) VALUES (‘dddd’,'dfsdf’)”);

    为何提示:
    Php-Txt-Db-Access Error:
    Insert Type (name,namepass) not supported

  5. SurfChen:

    @xieguolun
    请给出你的完整示例代码

  6. xieguolun:

    在http://www.c-worker.ch/txtdbapi/index_eng.php中下了一个txt-db,在正常的一个PHP文件下可以使用,不知为何在MVC类框架中不能使用,代码如下:
    class Main extends Controller
    {
    //首页
    public function index()
    {

    define(“API_HOME_DIR”,”txtDB/txt-db/”);
    define(“DB_DIR”,”data/”);

    $datapath = API_HOME_DIR.’txt-db-api.php’;

    include $datapath;
    if (!file_exists(DB_DIR . “txtdbapi-examples”)) {
    $db = new Database(ROOT_DATABASE);
    $db->executeQuery(“CREATE DATABASE txtdbapi-examples”);
    }

    // First call to this example -> initilize the example table and fill it with some data
    if (!file_exists(DB_DIR . “txtdbapi-examples/addressbook.txt”)) {
    $db = new Database(“txtdbapi-examples”);
    $db->executeQuery(“CREATE TABLE addressbook (id inc, surname str, familyname str, street str, plz str, city str, phone str)”);
    $db->executeQuery(“INSERT INTO addressbook(surname, familyname, street, plz, city, phone) VALUES (‘Paul’, ‘Mustermann’, ‘Stoneway 15′, ’2434′, ‘Stonehenge’, ‘+35 243 454234′)”);
    $db->executeQuery(“INSERT INTO addressbook(surname, familyname, street, plz, city, phone) VALUES (‘Otto’, ‘Mueller’, ‘Applestreet 32′, ’68457′, ‘Big Apple’, ‘+53 3888856664′)”);
    $db->executeQuery(“INSERT INTO addressbook(surname, familyname, street, plz, city, phone) VALUES (‘Cindy’, ‘Crawy’, ‘Park Avenue 55′, ’566666′, ‘New Borg’, ‘+22 434 8899066′)”);
    $db->executeQuery(“INSERT INTO addressbook(surname, familyname, street, plz, city, phone) VALUES (‘Matthew’, ‘Bluegerald’, ‘Sunnywalk 353′, ’11111′, ‘Beachcity’, ‘+44 535246634′)”);
    $db->executeQuery(“INSERT INTO addressbook(surname, familyname, street, plz, city, phone) VALUES (‘Arabella’, ‘Schrader’, ‘Milkyway 92′, ’55553′, ‘Astrotown’, ‘+99 555 999999′)”);
    }
    }
    以上的代码如定在一个PHP文件中使用是没有问题的。
    define(“API_HOME_DIR”,”txtDB/txt-db/”);
    define(“DB_DIR”,”data/”);
    是设置txt-db的路径和数据库的路径,在框架中自然成了相对于index.php所在的目录了。
    以上的例子实际上是它自带的一个例子吧了,中要放到MVC类的框架中的提不为:
    [executeQuery] Query: CREATE TABLE addressbook (id inc, surname str, familyname str, street str, plz str, city str, phone str)
    New SqlParser instance: CREATE TABLE addressbook (id inc, surname str, familyname str, street str, plz str, city str, phone str)
    parseSqlQuery: 0.0381510257721 seconds elapsed
    [executeQuery] Query: INSERT INTO addressbook(surname, familyname, street, plz, city, phone) VALUES (‘Paul’, ‘Mustermann’, ‘Stoneway 15′, ’2434′, ‘Stonehenge’, ‘+35 243 454234′)
    New SqlParser instance: INSERT INTO addressbook(surname, familyname, street, plz, city, phone) VALUES (‘Paul’, ‘Mustermann’, ‘Stoneway 15′, ’2434′, ‘Stonehenge’, ‘+35 243 454234′)
    parseSqlQuery: 0.00536108016968 seconds elapsed

  7. xieguolun:

    以上程序如在框架中运用只能建数据库,不能建表及对表的操作,我如用它自带的管理程序建表,就是上次提问的错误,哪位朋友知道请告知,QQ:354937725

  8. SurfChen:

    在非框架环境下,define(“DB_DIR”,”框架目录/data/”);。看看是否有同样问题,如果也出错则可能是目录问题。

  9. xieguolun:

    在非框架坏境下是没有问题的。

  10. SurfChen:

    我的意思是,在非框架环境下,使用和框架环境完全一样的配置(路径之类),看看是否出错。

    另外你用的是什么框架?你在这个问题的解决上做到了什么程度?

    你是否自己做过调试?例如在txt db的代码里做log,看看究竟是哪个地方出错,并把那个地方涉及的变量打印出来。

  11. xieguolun:

    在非框架的环境下是不出错的,我用过THINKPHP和Quickphp等MVC类框架,只要到了MVC类框架下就只能建数据库,这证明路径是没有问题的,但就是建不了表,如用它的管理程序建表,但也不能向其写入数据。你如愿意,我可把原程序发给你的。

  12. SurfChen:

    发过来,我的邮件地址在这个页面顶部可看到。

  13. xieguolun:

    已发过来了

  14. xieguolun:

    你如愿意加我QQ

  15. SurfChen:

    txt-db/sql.php定义了几个全局变量,但是没有用GLOBALS来定义。如果这个sql.php不是在全局环境里被include/require,这些全局变量就不存在。而在框架里,这个文件一般都是在非全局环境下被包含的,导致sql解析出错。

    我修改过的sql.php已经发到你的邮件了,请查收。

  16. xieguolun:

    谢谢!试过了,没问题了

  17. 丁一:

    请问下,txtsql和这个txtDBApi 哪个速度更快一些呢?

  18. xieguolun:

    txtDBApi的查询语句更接近SQL一些。

发表评论

  本站文章若无注明,则以署名·非商业用途·保持一致授权
  桂ICP备05004302号 感谢WordPress提供本程序 本模板下载