phlib / db
MySQL PDO DB Adapter。PDO 专门为 MySQL 提供了一些额外的好功能。
2.1.0
2022-01-02 08:33 UTC
Requires
- php: ^7.4 || ^8.0
- ext-pdo: *
Requires (Dev)
README
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/。