keruald / database
允许查询数据库
0.4.0
2023-06-22 21:56 UTC
Requires (Dev)
- nasqueron/codestyle: ^0.0.1
- phan/phan: ^5.3.2
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.6.2
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 引擎,在需要对其有所控制时使用此类。