codeigniter数据库连接分静态与动态两种:静态配置通过修改application/config/database.php中$db['default']数组实现,适用于固定环境;动态配置则在运行时传入配置数组并调用$this->load->database($config, true),需检查$db->conn_id或执行$db->simple_query('select 1')验证真实连接。

静态配置:改好 config/database.php 就能用
这是最常用的方式。打开 application/config/database.php,找到 $db['default'] 数组,按需填写以下核心字段:
-
hostname:数据库服务器地址,如
'localhost'或'127.0.0.1' - username 和 password:数据库登录凭据
- database:要连接的具体数据库名(必须已存在)
-
dbdriver:驱动类型,常见值有
'mysqli'(MySQL)、'postgre'(PostgreSQL)、'sqlsrv'(SQL Server) -
char_set 和 dbcollat:建议设为
'utf8'和'utf8_general_ci',避免中文乱码 -
db_debug:开发时设为
TRUE,上线后建议关掉(ENVIRONMENT !== 'production'是惯用写法)
保存后,在控制器或模型里直接用 $this->db 就能执行查询,无需额外加载。
动态配置:运行时传数组,不碰配置文件
当数据库信息来自表单、API 或多租户场景时,不能写死在配置文件里。可在控制器中这样操作:
$config = array(
'hostname' => $this->input->post('dbserver'),
'username' => $this->input->post('dbusername'),
'password' => $this->input->post('dbpassword'),
'database' => $this->input->post('dbname'),
'dbdriver' => 'mysqli',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci'
);
$db = $this->load->database($config, TRUE); // 第二个参数为 TRUE 才返回 DB 实例
if ($db && $db->conn_id) {
// 连接成功,可继续操作,比如 $db->query("SELECT 1")
} else {
// 连接失败,提示用户检查参数
}
注意:$this->load->database($config, TRUE) 必须加 TRUE,否则返回的是加载器对象,不是数据库实例;仅靠判断返回值是否为真不够,要检查 $db->conn_id 是否存在,这才是真实连接成功的标志。
验证连接是否生效的可靠方法
光看有没有报错不行,有些错误被静默吞掉。稳妥做法是主动探测:
- 用
$db->simple_query('SELECT 1')发一个轻量查询,返回TRUE表示通路正常 - 或者调用
$db->initialize(),它会尝试重连并返回布尔值(注意:这个方法可能抛出警告,生产环境建议配合@抑制) - 别依赖
if ($this->load->database(...))—— 它永远返回对象,不等于连接成功
常见踩坑点
很多连接失败其实和配置无关,而是环境或权限问题:
- MySQL 用户没授权从当前主机(比如
'user'@'127.0.0.1'≠'user'@'localhost')连接 - 防火墙或云服务安全组没放开数据库端口(MySQL 默认 3306,PostgreSQL 默认 5432)
- PHP 缺少对应扩展(如
mysqli或pgsql),可通过phpinfo()确认 - 数据库名拼错,或目标库根本不存在(CI 不会自动建库)











