连接数据库

连接数据库

连接默认分组

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

$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_onegroup_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();