bentools / simple-dbal
v0.6
2019-01-04 14:16 UTC
Requires
- php: >=7.1
- guzzlehttp/promises: ^1.3
Requires (Dev)
- bentools/iterable-functions: ^1.1
- incenteev/composer-parameter-handler: ^2.1
- phpunit/phpunit: ^6.0
- satooshi/php-coveralls: ^1.0
- squizlabs/php_codesniffer: ~2.0
- symfony/var-dumper: ^3.2
- symfony/yaml: ^3.2
This package is not auto-updated.
Last update: 2024-09-13 09:42:34 UTC
README
SimpleDBAL
一个基于 PDO 和 Mysqli 之上的现代包装器,用 PHP7.1 编写。它旨在在不考虑项目所使用的具体数据库的情况下,暴露相同的 API。
简介
PHP 提供了两种不同的 API 用于连接 SQL 数据库:PDO
和 mysqli
(我们不会讨论 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