elbucho/database

PDO子系统的实用包装器

1.2.1 2022-02-04 01:29 UTC

This package is auto-updated.

Last update: 2024-09-04 07:06:22 UTC


README

此项目提供了一个针对MySQL的PDO请求的实用包装器。它允许您在单个可调用对象中懒加载多个不同的数据库连接,并提供对PDO方法的简化访问。

配置

通过传递一个包含一个或多个DSN的Elbucho\Config对象来实例化Database类。有关如何放置和读取配置文件的说明,请参阅elbucho/config文档。

DSNs

数据库连接必须存储在Config对象的"dsns"键中,每个连接都必须包含以下所需键。您可以在一个Config对象中包含多个连接。

每个数据库连接的所需键包括

  • host => 这是主机名(例如,localhost)
  • dbname => 您要连接的数据库的名称
  • user => 您的数据库连接的用户名
  • pass => 您的数据库连接的密码

此外,可以指定可选键"port",其中包含数据库服务器正在运行的端口号。默认为3306。

默认句柄

如果您的配置文件只包含一个数据库连接的信息,Database对象将为此连接设置句柄为"默认"。如果您有多个连接,每个连接都必须以该连接的句柄名称开头。

您可以通过在配置中指定'default_handle'键来覆盖默认句柄名称

default_handle: foobar

以下有两个示例.yml文件。第一个文件显示单个连接,它将自动分配默认句柄。

dsns:
    host:   localhost
    port:   3307
    dbname: app_data
    user:   app_user
    pass:   app_password

此.yml文件显示多个连接(例如,开发和生产数据库服务器)

dsns:
    dev:
        host:   localhost
        port:   3306
        dbname: app_dev
        user:   dev_user
        pass:   dev_password

    prod:
        host:   10.20.1.101
        port:   3308
        dbname: app_prod
        user:   prod_user
        pass:   prod_password

这将创建两个句柄在$database对象中:"dev"和"prod"。

查询数据库

一旦设置了配置文件,您可以通过以下两种方式之一实例化数据库对象并查询它

$database->query()

此方法最多接受3个参数:您的查询本身、您希望传递给MySQL引擎的任何参数以及查询的句柄(默认为"默认")。它返回结果数组或抛出\PDOException,如果查询存在问题。

$database = new Database($config);

$results = $database->query('SELECT * FROM users`, [], 'prod');

foreach ($results as $user) {
    ...
}

$database->exec()

此方法与query()具有相同的3个参数,但不返回结果。它用于传递您不需要返回的命令给MySQL。

$database->exec('SET NAMES utf8mb4', [], 'prod');
$newUser = ['johnSmith', 'john.smith@company.org'];

$database->exec('INSERT INTO users (username, email) VALUES (?,?)', $newUser, 'prod');

获取最后一个插入ID

如果您刚刚在数据库中插入了一行或多行,可以通过输入以下内容来获取最后一个插入ID

$lastId = $database->getLastInsertId('prod');

var_dump($lastId);

// int(12345)

同样,如果省略了句柄,它将使用您设置的默认句柄。

获取前一个查询影响的行数

如果您刚刚在数据库中更新/插入/删除了一行或多行,可以使用以下方式获取受影响的行数

$rowCount = $database->getRows('prod');

var_dump($rowCount);

// int(23456)

类似于getLastInsertId(),如果省略了句柄,它将使用您设置的默认句柄。

设置属性

您可以通过setAttribute方法在给定的连接上设置PDO属性。这与PDO setAttribute方法的工作方式相同,只是还需要传递一个句柄。

$attribute = \PDO::ATTR_ERRMODE;
$value = \PDO::ERRMODE_EXCEPTION;
$handle = 'default';

$database->setAttribute($attribute, $value, $handle)