phlib/db

MySQL PDO DB Adapter。PDO 专门为 MySQL 提供了一些额外的好功能。

2.1.0 2022-01-02 08:33 UTC

This package is auto-updated.

Last update: 2024-09-03 09:20:51 UTC


README

Code Checks Codecov Latest Stable Version Total Downloads Licence

MySQL PDO DB Adapter。PDO 专门为 MySQL 提供了一些额外的好功能。

该数据库包装器相较于其他提供的功能。

  • 数据库切换方法
  • 统一的未知数据库异常处理
  • 捕获无效 SQL 语句异常
  • 对于长时间运行的过程(服务器已断开连接)的自动重连
  • 连接失败时的重试连接
  • 连接克隆
  • 对于以下有用的额外方法
    • 时区
    • 缓冲
    • 引用(表、列、值)
    • 选择
    • 插入
    • 更新
    • 删除

安装

通过 Composer

$ composer require phlib/db

"require": {
    "phlib/db": "*"
}

基本用法

$config = [
    'host' => 'localhost',
    'username' => 'myuser',
    'password' => 'mypassword',
    'dbname' => 'mydatabase'
];
$db = new \Phlib\Db\Adapter($config);
$table = $db->quoteIdentifier('mytable');
/* @var $stmt \PDOStatement */
$stmt = $db->query("SELECT * FROM $table WHERE id = ?", [$rowId]);

配置

API

以下部分记录了不太明显的 API。大多数方法都有文档说明,且易于理解。

Adapter::__clone

当你在处理一个查询的结果同时进行插入操作时,这很有用,因为这两个操作不能在同一个连接上执行。

$db2 = (clone)$db1;

Adapter 缓冲

当你需要从数据库服务器请求大量数据时,这很有用。默认情况下,PDO 会将所有结果拉回并保留在内存中,即使是对于 fetch() 调用。对于大型结果集,这会导致内存不足的问题。要停止 PDO 拉取结果,请关闭缓冲。

if ($db->isBuffered()) {
    $db->disableBuffering();
}

异常

所有 Phlib Db 异常都实现了 \Phlib\Db\Exception\Exception 接口。

try {
    $db = new \Phlib\Db\Adapter($config);
    $result = $db->query($sql, $bind);
} catch (\Phlib\Db\Exception\Exception $e) {
    $this->logException($e);
}

层次结构

+-- \Exception
|  +-- \InvalidArgumentException
|  |  +-- \Phlib\Db\Exception\InvalidArgumentException
|  +-- \RuntimeException
|  |  +-- \PDOException
|  |  |  +-- \Phlib\Db\Exception\RuntimeException
|  |  |  |  +-- \Phlib\Db\Exception\UnknownDatabaseException
|  |  |  |  +-- \Phlib\Db\Exception\InvalidQueryException

无效查询

InvalidQueryException 提供了特殊方法来检索查询和相关绑定参数。异常记录的消息包含这些详细信息,但方法允许以干净的方式提取它们。

  • getQuery
  • getBindData

已知问题

从类外部设置连接将导致异常行为。

$pdo = new \PDO('mysql:host=localhost');
$db = new \Phlib\Db\Adapter();
$db->setConnection($pdo);
$config = $db->getConfig(); // config is an empty array

$db->reconnect(); // throws InvalidArgumentException missing host param.

许可

此软件包是自由软件:您可以在自由软件基金会发布的 GNU 较小通用公共许可证的条款下重新分发和/或修改它,许可证版本为 3,或(根据您的选择)任何较新版本。

本程序的分发是希望它将是有用的,但没有任何保证;甚至没有对适销性或适用于特定目的的暗示保证。有关详细信息,请参阅 GNU 较小通用公共许可证。

您应已收到此程序的 GNU 较小通用公共许可证副本。如果没有,请参阅 https://gnu.ac.cn/licenses/