CodeIgniter 数据库操作完整指南:从连接、查询到缓存维护

Cora
Cora
发布时间:2026-10-14| 3人浏览过
原创

掌握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 框架实战的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。