silverorange /mdb2
PEAR MDB2 是 PEAR DB 和 Metabase php 数据库抽象层的合并。
Requires
- php: >=5.3.0
- pear/pear-core-minimal: ^1.9.0
Requires (Dev)
- silverorange/coding-standard: ^0.6.0
README
PEAR MDB2 是将 PEAR DB 和 Metabase 合并成一个数据库抽象层的项目。
有关这些项目的更多信息,请参阅
在这些 URL 上,您还可以找到这两个项目的许可信息和致谢信息。
实际上,MDB2 是 MDB 的第二个主要版本。新 MDB2 与旧 MDB 版本的主要区别在于 API 已彻底重构,以清理 API 并提高性能。
如果您有任何问题或建议,可以联系 Lukas Smith。项目的合著者是 Christopher Linn。
或者更好的是,将消息发布到 pear-dev@lists.php.net 邮件列表,以询问与 MDB2 包本身相关的开发问题。对于使用 MDB2 的问题,请直接将问题发送到 pear-general@lists.php.net。
特性
MDB2 为所有支持的 RDBMS 提供了一个公共 API。与大多数其他数据库抽象包相比,MDB2 在确保可移植性方面做得更深入。MDB2 的功能包括,但不限于:
- 面向对象的查询 API
- DSN(数据源名称)或数组格式用于指定数据库服务器
- 数据类型抽象和按需数据类型转换
- 可移植的错误代码
- 顺序和非顺序行提取以及批量提取
- 提取行的有序数组和相关数组
- 缓冲和非缓冲提取
- 准备/执行(绑定)模拟
- 序列模拟
- 替换模拟
- 有限子查询模拟
- 支持行限制
- 支持事务
- 支持大对象
- 支持索引/唯一
- 通过加载高级功能按需扩展框架
- 表信息接口
- RDBMS 管理方法(创建、删除、修改)
- 基于 XML 的 RDBMS 独立模式定义管理
- 根据更改的 XML 模式修改 DB
- 从现有 DB(目前是 MySQL 和 PgSQL)逆向工程 XML 模式
- 完全集成到 PEAR 框架中
- PHPDoc API 文档
入门
首先,我建议您查看 docs/example.php
。这将让您大致了解如何与 MDB2 交互。
之后,您可能想 查看 API。在那里,您还将找到描述 XML 模式格式的文档和一个小教程(它最近从 Metabase 转移过来,因此可能包含错误)。
包内容
作为用户,您只需包含一个 PHP 脚本 MDB2.php
,该脚本将安装到您的 PEAR 根目录中。所有其他文件及其包含的类将通过 MDB2::factory()
、MDB2::connect()
和 MDB2::singleton()
包括。
这将加载额外的类。大多数类都是按需加载的。
此外,MDB2 提供了一个广泛的测试框架,它通过浏览器和命令行界面进行工作。还有一些其他测试用于测试这两个包装器。这些文件将安装到您在 PEAR 根目录中找到的测试目录中。
文档
整个公共 API 和大多数私有方法(除了某些大型对象类)都使用 PHPDoc 注释进行了文档化。大多数 API 都借鉴了 ext-pdo,因此您可以在那里查找详细文档。
测试
对于大多数测试,您可以在相关的配置文件中设置用户名/密码/主机名。用户需要有权创建新的数据库。
test.php/clitest.php/testchoose.php
是 MDB2 提供的原生测试套件。请参阅测试目录中的 README 以获取详细信息。
example.php
包含对 MDB2 原生 API 的几个测试调用。它需要 PEAR::VAR_Dump
包,并配置为使用以下设置
username = metapear
password = funky
hostname = localhost
如何编写新驱动程序
MDB2 包的文档目录中提供了骨架驱动程序。
最佳做法是使用 MDB2 驱动程序并进行修改以适应新的 RDBMS。这将肯定更快,并确保新驱动程序充分利用 MDB2 框架。然而,我建议在修改这些更改时,与现有的 Metabase 驱动程序一起工作,以获得 RDBMS 的灵感。
为了检查驱动程序与 MDB2 的兼容性,您可以使用测试套件(请参阅上面的 测试 部分)
历史
MDB 是在 2001 年 12 月,Manuel broad 加入有关将 Metabase 功能引入 PEAR 的讨论后开始的(又一次)。他建议我可以承担这个项目。经过很多关于如何何时以及是否等问题的讨论后,我在 2002 年 2 月开始了开发。
MDB2 基于 Metabase,但已严重重工作以更好地匹配 PEAR DB API 和 PEAR CS。我迄今为止采取的方法是从 PEAR DB 中取 DB.php
并使其创建一个 Metabase 对象。我略微更改了 Metabase 结构。格式已重工作以更好地适应最终结构(具有 Metabase 和 PEAR DB BC 包装器的 MDB 独立版),以适应 PEAR CS,并使其他人为此做出贡献更容易。
metabase_interface.php
已重命名为 metabase_wrapper.php
,现在仅作为 Metabase 的包装器以保持 BC。还需要为 PEAR DB 创建一个包装器。
基本上,结果是接近 PEAR DB 结构的 Metabase。我还添加了 PEAR DB 中缺失的任何方法。正在将错误处理移到 PEAR 错误处理的工作正在进行中,但还需要一些工作。
在 MDB2 中,API 被重构得更加精简。删除了冗余功能。一些功能已移动到核心之外,成为单独的可加载模块。现在,结果集被包装成类似于 PEAR DB 的对象,而不是资源。
致谢
我特别感谢 Manuel Lemos(Metabase 的作者)让我参与这个项目,并且一直在这里提问。我还想感谢 PEAR 项目中的 Tomas Cox 和 Stig S. Bakken 在理解 PEAR、解决问题以及信任我方面的帮助。感谢 Paul Cooper 在 pgsql 驱动程序上的工作。此外,我还要感谢 Alex Black 对这个项目的热情,并为这个项目提供了 binarycloud 作为测试平台。感谢 Christian Dickmann,他是第一个将 MDB 用于实际用途的人,使 MDB 使用 PEAR 错误,并致力于 XML 模式管理器。
最后感谢Peter Bowyer,是他启动了这个讨论,让人们重新拾起这个项目,因为之前被称为“metapear”的版本在缺少反馈的情况下已经闲置。我猜我也应该感谢BackendMedia(我的公司:-)),因为它提供了在公司时间开发这个项目所需的资源(实际上,我大部分时间都在公司时间...所以就这样了)。