很久以前,当我刚开始学习PHP和编译MySQL查询的复杂性(2011年)时,我想到了为MySQLi编写包装器(如Doctrine)的想法,以简化访问数据库的语法。 已经是2019年了,决定分享我关于ORM主题的自行车。
因此,这就是DBX-基于MySQLi库的PHP MySQL数据库引擎,它基于对表和字段结构描述类型的查询,这些查询以规则数组的形式存在,具有静态查询缓存和静态哈希自动更新的功能。
与对PDO的普遍喜爱相反,它选择了轻量级的MySQLi功能,该功能更软,更容易编程,并且更简洁地适合于所建议的DBX API。 我什至没有使用过composer,因为除了自写项目之外,我没有任何项目使用第三方依赖项。
实际上,请考虑一个声明简单测试数据库及其表的结构的示例。 首先,我们将库本身与类连接,并向数据库主机发送授权数据:
require_once './DBX.php'; $dbx_data = ['localhost', 'root', 'root', 'dbx_test', '8889'];
现在假设我们需要使用常规PHP数组的语法在数据库中描述和创建表:
<?php $table_1 = 'example';
语法很简单。 我没有使用强类型,而是选择了值TEXT,NUMBER和TYMESTAMP。 当然,对于更“引导”的表结构,将使用具有自动增量的键ID字段(我在实际项目中没有看到设置自动增量的情况,并且键会干扰查询和表关系的设计)。 要指示该字段是否可以为空,请指定fill => true。
DataBaseX查询类型非常简单,包含基本方法,例如选择,插入,删除,更新,删除,截断等。
例如,创建表的查询:
或者添加数据和列结构的查询可能如下所示:
数组的结构允许一天描述数据库,随后只能操纵值字段来修改用于构成查询的数据。
这是一个示例更新语句,在以下示例中将删除该语句:
在我看来,使用criteria_field和criteria_value字段会使系统复杂化,因此我创建了一个查询,该查询会自动将数据添加到数据库(如果尚未创建)或更新现有数据。 我将此查询称为INJECT QUERY,它以前缀“ in”调用:
这在较低的水平上是这样的:
INSERT INTO `revolver__comments` (`field_id`, `field_content`) VALUES ('5', 'TEST UPDATE') ON DUPLICATE KEY UPDATE `field_id`='5', `field_content`='TEST UPDATE';
所有其他查询都是最简单的,描述它们没有任何意义(请参阅index.php测试文件中的示例),但是我不禁要说明SELECT查询的工作方式:
<?php
在这里,使用前缀“ s”,可以将查询参数
s | field_id( 顺序 )| asc( 方向 )| 100( 限制 )| 0( 偏移 )分组 。
其中,DBX具有独特的功能,例如基于JSON静态信息的内置文件缓存。 每个更改请求(INSERT,UPDATE,DELETE和TRUNCATE)都会导致在哈希哈希表中计算哈希并自动更新静态缓存,这使您不必考虑SELECT查询的负载。
将来,我计划使用UNION和JOIN配置系统开发DBX引擎并扩展SQL查询设计器的功能,并基于JSON结构类型从MySQL 8添加新的数据库支持。
现在,DBX已用于我的
RevolveR内容管理系统中,并显示出良好的特性(如果有一个更新的缓存,则整个站点将通过对数据库的一次查询进行初始化,并消耗约0.7 Mb的解释器RAM)。 对于我来说,在一个单独的文件中查看整个数据库结构也非常方便,这有时会加快新模块的构建和设计。
项目存储库: GitHub上的DBX v1.1.1 。