sumpygump / hazelplum

平面文件数据库库

2.2.2 2023-02-10 00:58 UTC

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),定义了两个表,userswork_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)字符作为行分隔符和列分隔符的格式会很酷。这意味着你可以在数据中存储空格、换行符、逗号、分号、竖线等,并且它将正常工作。