compeek/pdo-wrapper

PDO Wrapper 是一个简单的 PHP PDO 包装器,具有懒加载连接、手动断开连接、重新连接和存活测试功能。

dev-master 2017-10-13 22:24 UTC

This package is not auto-updated.

Last update: 2024-09-28 16:05:10 UTC


README

PDO Wrapper 是一个简单的 PHP PDO 包装器,具有懒加载连接、手动断开连接、重新连接和存活测试功能。

它不是一个 PDO 抽象,而是对 PDO 的简单扩展,添加了一些有用的功能,而不影响标准功能。

  • 懒加载连接:只有在需要时才会建立连接。
  • 手动断开连接:可以在任何时候断开数据库连接,而不仅仅是脚本结束时。
  • 重新连接:在断开连接后,稍后再次连接,保持任何之前创建的 PDO 语句。
  • 存活测试:测试连接是否仍然存活。

安装

使用 Composer 安装库。如果您不熟悉 Composer,请参阅 https://getcomposer.org.cn

将存储库和依赖项添加到您的 composer.json 文件中。

{
    "require": {
        "compeek/pdo-wrapper": "dev-master",
    },
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/compeek/pdo-wrapper"
        }
    ]
}

如果您的最低稳定性为 "stable",您可能需要通过在版本后追加 "@dev" 来为此包覆盖它。

    "require": {
        "compeek/pdo-wrapper": "dev-master@dev",
    }

使用方法

PDO 和 PDOStatement 包装类都包装并扩展了标准的 PDO 和 PDOStatement 类,因此它们可以在以前使用标准 PDO 和 PDO 语句对象的地方使用,所有标准方法都保持不变。

创建 PDO 包装对象与创建标准 PDO 对象完全相同。

$db = new \Compeek\PDOWrapper\PDO($dsn, $username, $password, $options);

但是,有两个可选的额外参数:$lazyConnect 和 $autoReconnect(两者都是布尔值)。

$db = new \Compeek\PDOWrapper\PDO($dsn, $username, $password, $options, $lazyConnect, $autoReconnect);

以下将解释这些参数。

PDO 包装器还有一些其他方法。以下将解释这些方法。

与标准 PDO 一样,PDO 语句包装器不是直接创建的,而是在调用 PDO 包装器的 prepare() 或 query() 方法时创建的。

PDO 语句包装器没有其他方法,只有一些内部使用的方法。

请参阅代码文档以获取有关实现和使用方法的更深入细节。

构造函数参数

$lazyConnect

懒加载连接意味着连接直到首次需要时才建立。

默认情况下,懒加载连接是禁用的(false),但将 true 传递给构造函数将启用它。

$autoReconnect

自动重新连接意味着如果客户端之前已从数据库断开连接,则按需建立新的连接。

这是一个便利性,以便在断开连接后不需要手动调用 connect()。一旦调用需要连接的方法,就会自动建立新的连接。

自动重新连接并不意味着将检测并刷新已死亡的连接,这很遗憾地不可行,因为考虑到预编译语句、事务、锁定等,这些都通常是状态性的。

默认情况下,自动重新连接是禁用的(false),但将 true 传递给构造函数将启用它。

方法

connect()

$db->connect();

如果当前未连接到数据库,则将建立连接。

disconnect()

$db->disconnect();

如果当前连接到数据库,则将断开连接。

reconnect()

$db->reconnect();

将断开当前到数据库的连接,并建立新的连接。

这只是一个快捷方式,如下所示:

$db->disconnect();
$db->connect();

isConnected()

$connected = $db->isConnected();

此方法返回客户端是否当前连接到数据库。

它与连接是否仍然存活无关,而只是是否已建立连接而尚未手动断开。要测试连接是否仍然存活,请参阅 isAlive();

isAlive()

$alive = $db->isAlive();

此方法返回连接是否仍然存活。

通过执行一个无操作(no-op)的SQL查询并检查其是否成功来完成。

为了避免在短时间内多次调用此方法时对数据库进行垃圾邮件式攻击,可以使用可选的$cacheDuration参数(整数)。

$cacheDuration = 3;
$alive = $db->isAlive($cacheDuration);

缓存持续时间是实际连接测试之间的最小秒数。如果在最后X秒内进行了连接测试,再次调用此方法将简单地返回缓存的存活状态,而不会执行额外的查询。默认情况下,缓存是禁用的,调用方法将始终测试连接。

虽然良好的编程实践是不应该在需要时长时间保持连接打开,但此方法可以用来确保在执行更多SQL语句之前连接仍然存活,如果有可能出现连接超时的情况。

错误

任何标准的PDO错误或异常都直接传递。

一个特殊情况是,如果调用需要连接的方法,但客户端之前已经断开连接并且自动重连被禁用,那么将抛出一个\Compeek\PDOWrapper\NotConnectedException异常(即使PDO错误模式未设置为异常)。

需求

PDO Wrapper在PHP 5.3.0+上运行,并需要PDO扩展。