CodeIgniter 数据库操作完整指南:从连接、查询到缓存维护
掌握CodeIgniter数据库核心操作,包括多库连接配置、Active Record链式查询构建、结果集高级处理,以及数据库缓存与Forge工具的实际应用指南。
数据库连接管理
在CodeIgniter中进行任何数据库操作前,必须先建立连接。框架提供了自动加载和手动实例化两种方式。
第1步:启用自动连接
如果网站几乎所有页面都需要访问数据库,推荐在初始化时自动加载数据库类,以减少重复代码。
- 入口:
application/config/autoload.php - 动作:编辑
$autoload['libraries']数组 - 参数:添加
'database'
$autoload['libraries'] = array('database');
第2步:手动连接数据库
若仅需在特定函数或控制器中使用数据库,应在使用时手动加载,以节省资源。
$this->load->database();
第3步:连接多个数据库
需同时操作不同数据库(如读写分离或多租户架构)时,可返回独立的数据库对象。
$DB1 = $this->load->database('group_one', TRUE);
$DB2 = $this->load->database('group_two', TRUE);
注:TRUE参数表示返回数据库组实例,否则将赋值给 $this->db。
Active Record 核心查询操作
CodeIgniter提供 Active Record 类,通过链式调用简化SQL生成。以下按操作类型分类说明:
查询与过滤数据
构建 SELECT 语句的核心方法。
$this->db->select('field1, field2'):指定查询字段。$this->db->from('table_name'):指定数据表。$this->db->where()/or_where()/where_in():构建 WHERE 条件。$this->db->like()/not_like():执行 LIKE 模糊查询。$this->db->order_by():设置排序规则。$this->db->group_by():分组统计。$this->db->limit()/offset():分页限制。
插入与批量写入
$this->db->insert():根据提供的数组或对象生成 INSERT 语句。$this->db->insert_batch():一次性插入多条记录,提升性能。$this->db->set():预置数据字段,常配合 insert/update 使用。
更新与删除
$this->db->update()/update_batch():生成 UPDATE 语句。$this->db->delete():生成 DELETE 语句。$this->db->truncate():快速清空表内容,比 DELETE 更高效但无法触发 onDelete 钩子。$this->db->empty_table():等同于 TRUNCATE,跨兼容性好。
链式调用示例
CodeIgniter 支持流畅接口(Fluent Interface),可将多条语句合并为一行。
$query = $this->db
->select('title, content')
->from('mytable')
->where('id', $id)
->limit(10, 20)
->get();
注:链式语法需 PHP 5 及以上版本支持。
原始查询与安全转义
当 Active Record 无法满足复杂 SQL 需求时,可使用原生查询。
$query = $this->db->query('YOUR QUERY HERE');
安全建议:始终对输入数据进行转义以防止注入攻击。
$sql = "INSERT INTO table (title) VALUES(" . $this->db->escape($title) . ")";
escape() 方法会自动识别数据类型并添加引号,无需手动处理。
结果集处理与辅助函数
获取 $query 对象后,可按需提取数据:
result():返回包含所有行的对象数组。result_array():返回纯关联数组。row()/row_array():返回第一行数据。first_row(),last_row(),next_row(),previous_row():游标式逐行读取,支持 'array' 参数切换返回格式。
其他统计函数:
num_rows()(总行数)、num_fields()(列数)、free_result()(释放内存)。
数据库缓存机制
开启缓存可显著降低频繁查询带来的服务器负载。激活需三步:
第1步:设置缓存目录
确保服务器路径可写,并在配置文件中指定:
// application/config/database.php
$db['default']['cachedir'] = APPPATH . 'cache/';
第2步:启用全局缓存
$db['default']['cache_on'] = 'TRUE';
第3步:清除过期缓存
当底层数据发生变化时,必须手动清除对应缓存,否则用户看到的是旧数据。
// 清除特定控制器和方法的缓存(注意斜杠)
$this->db->cache_delete('/blog', 'comments');
// 清除该页面对应所有缓存
$this->db->cache_delete_all();
注:手册中部分版本示例可能遗漏控制器前的 /,实际使用中请根据错误日志调整路径格式。
数据库维护与表结构管理
利用 Database Forge 类可在代码中动态管理数据库结构。
第1步:加载 Forge 类
$this->load->dbforge();
第2步:创建与管理数据库
$this->dbforge->create_database('db_name');
$this->dbforge->drop_database('db_name');
第3步:建表工具
定义字段属性后执行创建:
$fields = array(
'id' => array('type' => 'INT', 'constraint' => 5, 'unsigned' => TRUE, 'auto_increment' => TRUE),
'name' => array('type' =>'VARCHAR', 'constraint' =>'100'),
);
$this->dbforge->add_field($fields);
$this->dbforge->create_table('users');
总结
合理使用 CodeIgniter 的 Active Record 链式语法能大幅提升开发效率,而正确配置数据库连接池与缓存策略则是保障系统稳定性的关键。对于高频读写的场景,务必结合缓存清除机制确保数据一致性。
以上就是 CodeIgniter 数据库操作与维护的详细内容,更多关于 PHP 框架实战的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









