simbiat / database
数据库池和辅助类的类集。
2.12.0+20240701
2024-07-01 17:12 UTC
Requires
- php: ^8.3
- ext-mbstring: *
- ext-pdo: *
- simbiat/sand-clock: *
Suggests
- simbiat/cute-bytes: Allows to present bytes in human-readable format
- dev-master
- 2.12.0+20240701
- 2.11.0+20240630
- 2.10.4+20240616
- 2.10.3+20240526
- 2.10.2+20240512
- 2.10.1+20240505
- 2.10.0+20240504
- 2.9.0+20240409
- 2.8.0+20231003
- 2.7.0+20230924
- 2.6.4+20230923
- 2.6.3+20230923
- 2.6.2+20221229
- 2.6.1+20221216
- 2.6.0+20221213
- 2.5.3+20221021
- 2.5.2+20221010
- 2.5.1+202200919
- 2.5.0+20220809
- 2.4.0+20220720
- 2.3.2+20220717
- 2.3.1+20220508
- 2.3.0+20220501
- 2.2.6+20211231
- 2.2.5+20211228
- 2.2.4+20211225
- 2.2.3+20211224
- 2.2.2+20210913
- 2.2.1+20210912
- 2.2.0+20210623
- 2.1.0+20210611
- 2.0.2+20210525
- 2.0.1+20210314
- 2.0.0+20210311
- 1.3.1+20210123
- 1.3.0+20201229
- 1.2.1+20201226
- 1.2.0+20201219
- 1.1.12+20201211
- 1.1.11+20201205
- 1.1.10+20201204
- 1.1.9+20201203
- 1.1.8+20201130
- 1.1.7+20201130
- 1.1.6+20201121
- 1.1.5+20201121
- 1.1.4+20201114
- 1.1.3+20201113
- 1.1.2+20200905
- 1.1.1+20200401
- 1.1.0+20200316
- 1.0.0+20191110
This package is auto-updated.
Last update: 2024-10-01 00:13:38 UTC
README
这是一组3个类,用于方便与数据库工作,是PHP PDO的包装和糖。
类
Config
:一个用于准备数据库连接配置的类。你可以将其视为常见的'config.php'文件的替代品,但它有几个潜在的有益功能- 强制有用安全驱动程序设置
- 验证某些主机参数(如端口号)
- 使用
getDSN()
函数方便地生成DSN - 密码保护,使从外部函数中欺骗密码变得更困难,除了适当的Pool类
Pool
:一个静态代理类,可以池化数据库连接设置(\Simbiat\Database\Config对象)并在请求PDO连接时使用当前活动的连接。如果有需要,可以更改活动连接。Controller
:具有一些潜在有用功能的包装器- 你可以发送字符串(单个查询)和数组(查询集),两者都会被处理。在数组的情况下,它将自动开始事务并分别处理每个查询。如果数组中有任何SELECT类似的查询,你会收到通知,因为它们的输出可能无法正确处理。
- 在死锁的情况下尝试重试。你可以使用适当的设置器设置重试次数和每次尝试前的睡眠时间。
- 绑定糖
- 你可以在发送字符串时发送适当的数据类型,如
'boolean'
,而不是\PDO::PARAM_*
或模糊的整数 - 强制类型转换:已知PDO驱动程序有时不进行转换或以奇怪的方式转换。一些情况强制执行常规转换,以尝试解决此问题
- 限制转换:在发送与LIMIT一起使用的绑定时,你需要记住将其转换为整数,但使用此控制器,只需将其标记为
'limit'
- 类似转换:在发送与LIKE一起使用的绑定时,你需要自己用
%
括起来,但使用此控制器,只需将其标记为'like'
- 日期和时间转换:将绑定标记为
'date'
或'time'
,脚本将尝试检查它是否是日期时间值并将其转换为相应的字符串。或者甚至获取当前时间,如果你不想使用引擎自己的函数
- 你可以在发送字符串时发送适当的数据类型,如
- 语义包装器:一组用于SELECT的函数,明确说明它们将返回什么(行、列、全部)
- 智能结果返回:如果你发送单个查询,脚本将尝试识别它并执行
fetch()
或fetchAll()
或rowCount()
,并设置适当的结果。缺点是之后你需要使用getResult()
。
如何使用
请注意,我在我的项目中使用MySQL作为主要的DB引擎,因此我可能遗漏了其他引擎的一些特性。请告诉我这些特性,以便它们可以被整合。
首先,你需要创建一个\Config对象,并设置其参数如下
$config = (new \Simbiat\Database\Config)->setUser('user')->setPassword('password')->setDB('database');
上面的行是你需要的最小内容。此外,你可以设置驱动程序选项如下
$config->setOption(\PDO::MYSQL_ATTR_FOUND_ROWS, true)->setOption(\PDO::MYSQL_ATTR_INIT_COMMAND, 'SET @@global.character_set_client = \'utf8mb4\', @@global.character_set_connection = \'utf8mb4\', @@global.character_set_database = \'utf8mb4\', @@global.character_set_results = \'utf8mb4\', @@global.character_set_server = \'utf8mb4\', @@global.time_zone=\'+00:00\'');
在设置满意后(可以一行完成),你需要将其添加到池中
(new \Simbiat\Database\Pool)->openConnection($config, 'example');
传递ID不是必需的,但如果需要处理多个连接,这将使你的生活变得更轻松。
你也可以传递第三个参数(maxTries
),如果你想让脚本在失败的情况下重试连接。默认值为1
。
如果连接成功建立,你可以通过不向池发送任何参数来获取它的PDO对象
(new \Simbiat\Database\Pool)->openConnection();
或者发送之前配置的 $config
或连接ID,如果你需要特定的一个。 \Controller 类使用不带参数的变体以提高灵活性,但如果认为有必要,也可以进行覆盖。
如果连接失败,你可以使用以下方式获取错误:
\Simbiat\Database\Pool::$errors
要使用 \Controller,你需要按照上述方式建立连接,然后调用它的 query()
函数或任何包装器。例如,这一行将计算表中的行数,并返回这些行的数量,即一个整数
(new \Simbiat\Database\Controller)->count('SELECT COUNT(*) FROM `table`');
这一行将返回一个布尔值,表明某个东西是否存在于表中
(new \Simbiat\Database\Controller)->check('SELECT * FROM `table` WHERE `time`=:value', [':value'=>['', 'time']]);
上述示例还展示了设置绑定的一种可能方式。常规 \PDO 允许绑定如 hook, value, type
的值,但 \Controller 如果你想发送非字符串值或特殊值(如上面提到的 time
),则期望 value
为一个数组。由于我们为 time
发送了一个空值,\Controller 将获取当前微时间戳,将其转换为并绑定成 Y-m-d H:i:s.u
格式。