keruald/database

允许查询数据库

0.4.0 2023-06-22 21:56 UTC

This package is auto-updated.

Last update: 2024-08-31 00:32:22 UTC


README

此库为数据库操作提供了一个简单的抽象层。

配置

要获取数据库实例,您需要以数组的形式传递配置。属性和值取决于您要使用的引擎。

MySQLi

例如

[
    'engine' => Keruald\Database\Engines\MySQLiEngine::class,
    'host' => 'localhost',
    'username' => 'app',
    'password' => 'someSecret',
    'database' => 'app',          // optional
]

关于 fetch_mode 参数

fetch_mode 参数用于确定如何表示结果

  • MYSQLI_ASSOC 将使用列名
  • MYSQLI_NUM 将使用枚举数组(0,1,2,…)
  • MYSQLI_BOTH 将使用两者

代码默认提供 MYSQLI_ASSOC 以允许直接将行结果表示为 API 输出,并鼓励您注意列名以更好地维护代码。如果您希望切换到默认的 MySQLi 行为,请使用 MYSQLI_BOTH

这些常量由 MySQLi 扩展定义。

旧版驱动程序

mysql 扩展已在 PHP 5.7 中弃用,并在 PHP 7 中删除。因此,此扩展不再受支持。您可以使用直接将 'MySQL' 替换为 'MySQLi' 作为引擎。

针对测试的专用驱动程序

Blackhole

Blackhole 引擎不执行任何操作,始终将 true 作为查询结果返回。

此引擎可以用于模拟

  • 直接,当数据库行为不重要时
  • 通过覆盖 query() 或其他任何方法的行为来构建模拟

它也可以与加载器一起使用,而不需要任何特定于引擎的配置

[
    'engine' => Keruald\Database\Engines\BlackholeEngine::class,
]

MockDatabaseEngine

模拟数据库是黑洞引擎的简单实现,作为当您想对已知查询返回确定性响应时的模拟服务。

好处是您不需要运行数据库服务器来进行单元测试。

您可以将一个包含每个查询一个元素的数组传递给 withQueries 方法

  • 键:SQL 查询
  • 值:包含该查询所有行的数组

例如

    public function testGetFruits () : void {
        $queries = [
            "SELECT name, color FROM fruits" => [
                [ "name" => "strawberry", "color" => "red" ],
                [ "name" => "blueberry", "color" => "violet" ],
            ],
        ];

        $db = (new MockDatabaseEngine())
            ->withQueries($queries);

        // Inject $db to a class and test it
    }

要返回单行,您可以使用 [[…]] 来表示一个数组的数组

        $queries = [
            "SELECT 1+1" => [[ "1+1" => 2 ]],
        ];

然后,查询结果将包装在 MockDatabaseResult 类中。

当查询不存在时,将抛出异常。

我们建议在结果不重要时使用 Blackhole 引擎,在需要对其有所控制时使用此类。