CodeIgniter4 数据库配置
CodeIgniter 有一个用来保存数据库配置的文件(用户名,密码,数据库名等),这个配置文件位于 application/Config/Database.php。你也可以在 .env 文件里配置数据库连接参数。下面来看看详细配置信息。
配置信息是一个数组,存储在类的属性里面,原型如下:
public $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'database_name',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => TRUE,
'DBDebug' => TRUE,
'cacheOn' => FALSE,
'cacheDir' => '',
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'strictOn' => FALSE,
'failover' => array(),
];
类的属性名称就是连接名称,并且在连接时可以作为指定配置组名称使用。
有些数据库驱动(例如:PDO,PostgreSQL,Oracle,ODBC)可能需要提供完整的 DNS 信息。在这种情况下,你需要使用 DNS 配置参数,就像使用该驱动的原生 PHP 扩展一样,例如:
// PDO
$default['DSN'] = 'pgsql:host=localhost;port=5432;dbname=database_name';
// Oracle
$default['DSN'] = '//localhost/XE';
注解
如果你没有指定 DNS 驱动需要的参数信息,CodeIgniter 将使用你提供的其它配置信息自动构造它。
如果你提供了一个 DNS 参数,但是缺少了某些配置(例如:数据库的字符集),若该配置存在在其它的配置项中,CodeIgniter 将自动在 DNS 上附加上该配置。
当主数据库由于某些原因无法连接时,你可以配置多个灾备数据库。例如可以像下面这样为一个连接配置灾备数据库:
$default['failover'] = [
[
'hostname' => 'localhost1',
'username' => '',
'password' => '',
'database' => '',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => TRUE,
'DBDebug' => TRUE,
'cacheOn' => FALSE,
'cacheDir' => '',
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'strictOn' => FALSE
],
[
'hostname' => 'localhost2',
'username' => '',
'password' => '',
'database' => '',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => TRUE,
'DBDebug' => TRUE,
'cacheOn' => FALSE,
'cacheDir' => '',
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'strictOn' => FALSE
]
];
你可以指定任意多个灾备数据库配置。
你可以选择性地存储多组连接信息。例如,在一个安装实例里面运行多个环境(开发、生产、测试等),你可以为每个环境配置连接组,然后在组之间进行切换。举个例子:若要设置一个 ‘test’ 环境,你可以这么做:
public $test = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'database_name',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => TRUE,
'DBDebug' => TRUE,
'cacheOn' => FALSE,
'cacheDir' => '',
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'compress' => FALSE,
'encrypt' => FALSE,
'strictOn' => FALSE,
'failover' => array()
);
然后,修改该配置文件中的属性值,告知系统使用该组信息:
$defaultGroup = 'test';
注解
组名称 ‘test’ 是任意的。它可以是你想要的任意名称。默认情况下,主连接使用 ‘default’ 这个名称,但你也可以起一个与你项目更加相关的名称。
你可以修改配置文件里面类的构造函数,让它自动检测运行环境并将 ‘defaultGroup’ 更新为正确的值:
class Database
{
public $development = [...];
public $test = [...];
public $production = [...];
public function __construct()
{
$this->defaultGroup = ENVIRONMENT;
}
}
配置 .env 文件
你也可以将当前服务器的数据库配置保存到 .env
文件 中。你只需要在默认配置组中输入你想要变更的值。该值在 default
组中的格式为:
database.default.username = 'root';
database.default.password = '';
database.default.database = 'ci4';
其它信息
参数解释:
配置名 | 描述 |
---|---|
dsn | DNS 连接字符串 (该字符串包含了连接数据库的全部配置信息) |
hostname | 数据库的主机名,通常为本机的 ‘localhost’ |
username | 连接数据库的用户名 |
password | 连接数据库的密码 |
database | 需要连接的数据库名 |
DBDriver | 数据库类型,如:MySQLi、Postgre等。大小写必须与驱动名匹配 |
DBPrefix | 当使用 查询构造器 查询时,可以选择性的为表加个前缀,它允许多个 CodeIgniter 程序共用一个数据库 |
pConnect | TRUE/FALSE (boolean) - 是否使用持续连接 |
DBDebug | TRUE/FALSE (boolean) - 是否显示数据库错误信息 |
cacheOn | TRUE/FALSE (boolean) - 是否开启数据库查询缓存 |
cacheDir | 数据库查询缓存目录,服务器绝对路径 |
charset | 与数据库通信时所使用的字符集 |
DBCollat | 与数据库通信时所使用的字符集规则(只用于 ‘MySQLi’ 数据库驱动) |
swapPre | 替换默认的 dbprefix 表前缀,该项设置对于分布式应用是非常有用的, 你可以在查询中使用由最终用户定制的表前缀。 |
schema | 默认数据库模式为 ‘public’,用于 PostgreSQL 和 ODBC 驱动 |
encrypt | 是否是用加密连接 |
‘sqlsrv’ 和 ‘pdo/sqlsrv’ 驱动接受 TRUE/FALSE | |
‘MySQLi’ 和 ‘pdo/mysql’ 驱动接受一个数组,选项如下: | |
‘ssl_key’ - 私钥文件存放路径 | |
‘ssl_cert’ - 公钥证书文件存放路径 | |
‘ssl_ca’ - CA证书授权文件路径 | |
‘ssl_capath’ - PEM格式的受信任CA证书存放目录 | |
‘ssl_cipher’ - 允许 使用的加密算法列表,多项用 (‘:’) 分割 | |
‘ssl_verify’ - TRUE/FALSE; 是否验证服务器的证书 (仅限 MySQLi) | |
compress | 是否使用客户端压缩协议(只用于 MySQL) |
strictOn | TRUE/FALSE (boolean) - 是否强制使用 “Strict Mode” 连接。在程序开发时,使用 strict SQL 是一个好习惯 |
port | 数据库端口号。 要使用这个值,你应该添加以下一行代码到数据库配置组中 $default['port'] = 5432; |
注解
根据你使用的数据库平台(MySQL、PostgreSQL等)不是所有参数都要配置。例如,当你使用 SQLite 时,你无需指定用户名和密码,数据库名称是你的数据库文件路径。以上内容假设你使用的是 MySQL 数据库。