sumpygump / hazelplum
平面文件数据库库
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-21 07:01:26 UTC
README
这是一个用于存储字符串的简单平面文件数据库的数据库适配器。它对于没有适当数据库的小型项目来说,用于在类似数据库的表中存储事物非常有用。
安装
使用composer进行安装
composer require sumpygump/hazelplum
用法
Hazelplum将其数据存储在文件系统上的文件中。数据库定义文件(.dbd文件)提供了关于可用的表和列(模式)的详细信息,实际数据则存储在每个表的单独文件中(.dtf文件)。
创建数据库定义文件
要创建数据库,在所需的数据目录中创建一个.dbd文件。dbd文件名是数据库名。它应该具有以下格式:(所有双下划线都应被视为占位符)
每个表和列定义应单独一行。
每行以三个字母的代码开始,表示正在定义的内容。
TAB
:提供一个新表名,以下将定义列。KEY
:这是表的主键列(每行的唯一标识符)。COL
:这是另一个列。您可以根据需要拥有任意数量的列。**
:两个星号表示表定义的结束。可以在下面开始另一个表定义。
以下是一个示例dbd文件(work.dbd),定义了两个表,users
和 work_assignments
TAB users
KEY id
COL username
COL first_name
COL last_name
COL date_created
COL is_active
**
TAB work_assignments
KEY id
COL user_id
COL assignment_name
COL date_created
COL status
使用库
一旦定义并放置了dbd文件,您就可以开始使用Hazelplum库来创建和访问数据。
首先启动一个数据库连接对象(Hazelplum类对象),定义db文件所在位置以及要使用的数据库名称。
require_once 'vendor/autoload.php';
use Hazelplum\Hazelplum;
$data_location = "data"; // Directory where the db files live
$db_name = "work"; // Name of database definition file (without dbd extension)
$db = new Hazelplum($data_location, $db_name);
注意没有列类型的概念,所有内容都只是以“文本”形式存储。
插入记录
您可以使用insert
方法将一些数据插入到您的表中
insert
方法有三个参数
- 表名:要插入的表的字符串表示名
- 列:要填充的列的逗号分隔列表
- 值:每个列提供的值的数组
指定列列表的怪异性质是针对历史原因的。
// Insert a new record into the users table
$data = ["gary123", "Gary", "Harris", time(), true];
$db->insert("users", "username,first_name,last_name,date_created,is_active", $data);
选择记录
您可以选择之前已插入到数据库中的数据。
select
方法有以下参数
- 表名:要选择的表
- 列列表:要选择的列的逗号分隔列表,可以使用"*"选择所有
- 条件:限制记录的简单语句,格式“COL=VALUE”
- 排序顺序:排序的列,可以在其后包含"ASC"或"DESC"。
// Select some data
$data = $db->select("users", "*", "username=gary123", "date_created desc");
// Returns an array of associative arrays for each record
// [
// [
// 'id' => 1,
// 'username' => 'gary123',
// 'first_name' => 'Gary',
// 'last_name' => 'Harris',
// 'date_created' => '1675963718',
// 'is_active' => '1',
// ]
// ];
更新记录
您可以更新记录。
update
方法有以下参数
- 表名:要更新的表
- 列列表:要更新的列的逗号分隔列表,可以使用"*"更新所有
- 值:与列列表对应的值的数组
- 条件:限制记录的简单语句,格式“COL=VALUE”
它返回受影响行数。
// Update some data
$result = $db->update("users", "is_active", false, "id=1");
// Returns number of affected rows
// 1
删除记录
您可以删除记录。
delete
方法有以下参数
- 表名:从其中删除记录的表
- 条件:限制受影响的记录的简单语句,格式“COL=VALUE”
它返回受影响行数。
// Delete a record
$result = $db->delete("users", "username=gary123");
// Returns number of affected rows
// 1
你为什么要做这个?
我在2006年做了这个,当时我需要为网站存储简单的配置数据。有许多其他可用的选项,比如json文件、csv、ini、toml、yaml、sqlite以及许多其他方式来存储平面文件中的数据。我的目标是让它“有点像SQL数据库”,但实际上非常轻量。我觉得探索一个使用ASCII记录分隔符(1E
)和单元分隔符(1F
)字符作为行分隔符和列分隔符的格式会很酷。这意味着你可以在数据中存储空格、换行符、逗号、分号、竖线等,并且它将正常工作。