bentools/simple-dbal

v0.6 2019-01-04 14:16 UTC

This package is not auto-updated.

Last update: 2024-09-13 09:42:34 UTC


README

Latest Stable Version License Quality Score Total Downloads

SimpleDBAL

一个基于 PDO 和 Mysqli 之上的现代包装器,用 PHP7.1 编写。它旨在在不考虑项目所使用的具体数据库的情况下,暴露相同的 API。

简介

PHP 提供了两种不同的 API 用于连接 SQL 数据库:PDOmysqli(我们不会讨论 mysql_* 函数,因为它们已被弃用)。它们都做更多或更少相同的事情,但是

  • 它们的 API 完全不同(不同的方法名称和签名)
  • 它们都有自己的优缺点。
  • 一个的某些功能在另一个中缺失。

这个库公开了一个 API,可以由任何这些 API 使用,以更现代的方式(面向对象、迭代器、返回类型等)透明地使用。

这也意味着您可以在不重写整个代码的情况下,从 PDO 切换到 mysqli 以及反之亦然。

根据我的个人经验,我习惯了使用 PDO,但在另一个项目中被迫处理 mysqli,这真的非常混乱。

概览

use BenTools\SimpleDBAL\Model\Credentials;
use BenTools\SimpleDBAL\Model\SimpleDBAL;

$credentials = new Credentials('localhost', 'user', 'password', 'database');
$cnx         = SimpleDBAL::factory($credentials, SimpleDBAL::PDO);
$query       = "SELECT `id`, `name` FROM guys WHERE created_at > ?";
foreach ($cnx->execute($query, [new DateTime('-1 month')]) as $item) {
    var_dump($item['name']);
}

附加功能

  • 预处理语句的即时参数绑定(只需在查询后传递一个参数数组即可)
  • 自动绑定 DateTimeInterface 对象(格式为 YYYY-MM-DD HH:ii:ss)
  • 异步查询(承诺)
  • 并行查询
  • mysqli 预处理语句中命名参数的支持(使用正则表达式进行填充 - 实验性功能)
  • 在失去连接后可以 静默重连

Result 对象

向适配器发送的每个查询都将返回一个 BenTools\SimpleDBAL\Contract\ResultInterface 对象。

对于 SELECT 查询,使用以下方法

  • $result->asArray() 获取包含整个结果集的数组
  • $result->asRow() 获取结果集的第一行,作为一个关联数组
  • $result->asList() 获取结果集的第一列,作为一个顺序数组
  • $result->asValue() 获取单个值(即第一行的第一列)
  • foreach ($result as $row) 遍历结果集(使用延迟加载)
  • count($result) 返回结果集的行数。

对于 INSERT / UPDATE / DELETE 查询,使用以下方法

  • count($result) 返回受影响行数
  • $result->getLastInsertId() 获取最后插入行的 ID 或序列值。

安装

composer require bentools/simple-dbal

测试

./vendor/bin/phpunit

文档

入门

配置自动重连

异步和并行查询

连接池

已知问题