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的呢,呵呵)看看查询语句和效果。

2006-04-14 11:10:22
TXT DB API 我看过。
从sql解析到文本处理,速度不是很理想。
所以就做了txtdb.
txtdb 如果有字段名为id的话,是支持自增的。
小应用怎么都可以。
大了的话,还是数据库好。
2006-11-22 12:01:46
ghgjhgjhg中
2006-11-22 14:51:10
to:upstairs
test spam?
中
2009-01-01 10:23:48
$rs=$sql->executeQuery(“insert into user (name,namepass) VALUES (‘dddd’,'dfsdf’)”);
为何提示:
Php-Txt-Db-Access Error:
Insert Type (name,namepass) not supported
2009-01-03 20:37:41
@xieguolun
请给出你的完整示例代码
2009-01-07 20:33:39
在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
2009-01-07 20:46:00
以上程序如在框架中运用只能建数据库,不能建表及对表的操作,我如用它自带的管理程序建表,就是上次提问的错误,哪位朋友知道请告知,QQ:354937725
2009-01-10 12:36:07
在非框架环境下,define(“DB_DIR”,”框架目录/data/”);。看看是否有同样问题,如果也出错则可能是目录问题。
2009-01-10 16:51:55
在非框架坏境下是没有问题的。
2009-01-10 17:09:14
我的意思是,在非框架环境下,使用和框架环境完全一样的配置(路径之类),看看是否出错。
另外你用的是什么框架?你在这个问题的解决上做到了什么程度?
你是否自己做过调试?例如在txt db的代码里做log,看看究竟是哪个地方出错,并把那个地方涉及的变量打印出来。
2009-01-10 20:56:07
在非框架的环境下是不出错的,我用过THINKPHP和Quickphp等MVC类框架,只要到了MVC类框架下就只能建数据库,这证明路径是没有问题的,但就是建不了表,如用它的管理程序建表,但也不能向其写入数据。你如愿意,我可把原程序发给你的。
2009-01-10 21:23:38
发过来,我的邮件地址在这个页面顶部可看到。
2009-01-10 21:45:06
已发过来了
2009-01-10 21:46:12
你如愿意加我QQ
2009-01-11 13:52:01
txt-db/sql.php定义了几个全局变量,但是没有用GLOBALS来定义。如果这个sql.php不是在全局环境里被include/require,这些全局变量就不存在。而在框架里,这个文件一般都是在非全局环境下被包含的,导致sql解析出错。
我修改过的sql.php已经发到你的邮件了,请查收。
2009-01-11 14:13:58
谢谢!试过了,没问题了
2009-12-02 22:12:06
请问下,txtsql和这个txtDBApi 哪个速度更快一些呢?
2010-03-21 17:05:05
txtDBApi的查询语句更接近SQL一些。