# 连接数据库

### 连接默认分组

在任何需要的函数中添加以下代码，或在类构造函数中添加，即可连接数据库并使该连接在类中全局可用。

    $db = \Config\Database::connect();

如果上述函数的第一个参数为空，则会连接数据库配置文件中指定的默认分组。对于大多数情况，这是首选的使用方式。

框架还提供了一个便捷方法，它纯粹是上述代码的封装，使用更方便：

    $db = db_connect();

### 可用参数

\Config\Database::connect($group = null, bool $getShared = true): BaseConnection

1. `$group`：数据库分组名称，必须与配置类的属性名一致。默认值为 `Config\\Database::$defaultGroup`。

2. `$getShared`：true/false（布尔值）。是否返回共享连接（参阅下文的“连接多个数据库”）。

### 连接特定分组

该函数的第一个参数是 可选的，用于指定配置文件中的特定数据库分组。示例如下：

要从配置文件中选择特定分组，可以这样做：

    $db = \Config\Database::connect('group_name');

其中 `group_name` 是配置文件中定义的连接分组名称。

### 建立多个指向相同数据库的连接

默认情况下，`connect()` 方法每次都会返回同一个数据库连接实例。如需为同一个数据库建立独立的连接，请将第二个参数设为 `false`：

    $db = \Config\Database::connect('group_name', false);

## 连接多个数据库

如果需要同时连接多个数据库，可以按如下方式操作：

    $db1 = \Config\Database::connect('group_one');
    $db2 = \Config\Database::connect('group_two');

注意：将 `group_one` 和 `group_two` 替换为实际要连接的分组名称。

备注

如果只是在同一个连接上使用不同的数据库，无需创建独立的数据库配置。可以在需要时切换到其他数据库，例如：`$db->setDatabase($database2_name);`。

## 使用自定义设置连接

可以传入数据库设置数组来代替分组名称，从而使用自定义设置建立连接。传入的数组格式必须与配置文件中定义的分组格式一致：

    $custom = [
        'DSN'      => '',
        'hostname' => 'localhost',
        'username' => '',
        'password' => '',
        'database' => '',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => false,
        'DBDebug'  => true,
        'charset'  => 'utf8mb4',
        'DBCollat' => 'utf8mb4_general_ci',
        'swapPre'  => '',
        'encrypt'  => false,
        'compress' => false,
        'strictOn' => false,
        'failover' => [],
        'port'     => 3306,
    ];
    $db = \Config\Database::connect($custom);

## 重新连接 / 保持连接活跃

如果在执行耗时的 PHP 任务（例如处理图像）期间超过了数据库服务器的空闲超时时间，在发送后续查询之前应考虑调用 `reconnect()` 方法。该方法可以从容地保持连接活跃或重新建立连接。

`reconnect()` 方法会通过 ping 服务器来检查连接是否仍然活跃。如果连接已断开，它将关闭并重新建立连接。

    $db->reconnect();

## 手动关闭连接

虽然 CodeIgniter 会智能地处理数据库连接的关闭，但也可以显式地关闭连接。

    $db->close();