phpCI框架如何批量插入多条SQL记录?示例代码怎么写?
- 虚拟主机
- 2025-12-18
- 5
在PHP开发中,CI框架(CodeIgniter)因其轻量级和高效性被广泛应用,数据库操作是其中的核心功能之一,本文将详细介绍如何使用CI框架向数据库插入单条或多条SQL记录,包括基础配置、代码示例及注意事项,确保已正确配置CI框架的数据库连接,在application/config/database.php文件中,设置数据库主机、用户名、密码、数据库名等参数。
$db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'test_db', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8mb4', 'dbcollat' => 'utf8mb4_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
配置完成后,可以通过CI的$this>db对象进行数据库操作,插入单条记录时,通常使用insert()方法,假设有一个users表,结构如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int(11) | 主键,自增 |
| username | varchar(50) | 用户名 |
| varchar(100) | 邮箱 | |
| created_at | datetime | 创建时间 |
插入单条记录的示例代码如下:

在上述代码中,$data数组中的键名对应数据库表的字段名,CI会自动处理SQL载入防护,如果需要插入多条记录,可以使用insert_batch()方法,向users表插入三条记录:
$batch_data = array( array( 'username' => 'alice', 'email' => 'alice@example.com', 'created_at' => date('Ymd H:i:s') ), array( 'username' => 'bob', 'email' => 'bob@example.com', 'created_at' => date('Ymd H:i:s') ), array( 'username' => 'charlie', 'email' => 'charlie@example.com', 'created_at' => date('Ymd H:i:s') ) ); $this>db>insert_batch('users', $batch_data); $affected_rows = $this>db>affected_rows(); // 获取受影响的行数 echo "成功插入 " . $affected_rows . " 条记录";
需要注意的是,insert_batch()方法要求传入的数据必须是一个二维数组,且每个子数组的结构必须一致,CI框架还提供了set()方法结合insert()实现更灵活的插入操作,
在上述代码中,第三个参数FALSE表示不转义输入值,适用于直接使用SQL函数的情况,插入操作完成后,可以通过affected_rows()方法获取受影响的行数,或通过insert_id()获取自增ID,这些方法在调试和业务逻辑处理中非常有用。
CI框架的Active Records类还支持链式操作,例如在插入前添加条件或验证:
$this>db>set('status', 'active'); $this>db>where('id', 1); $this>db>update('users'); // 更新操作示例,类似插入也可链式调用
需要注意的是,批量插入时,如果数据量较大,建议分批次执行以避免内存溢出或超时,可以通过循环调用insert_batch()或调整PHP的max_execution_time和memory_limit配置来实现。

确保数据库表的结构与插入的数据类型匹配,例如字符串类型需要用引号包裹,日期格式需符合数据库要求,在生产环境中,建议启用CI的查询日志功能($this>db>last_query())以便调试SQL语句。
相关问答FAQs
Q1: CI框架插入数据时如何处理SQL载入?
A: CI框架的Active Records类会自动对输入数据进行转义和预处理,防止SQL载入。$this>db>insert()和$this>db>insert_batch()方法内部会使用mysqli_real_escape_string或类似函数处理数据,如果需要手动转义,可以使用$this>db>escape()方法,$this>db>escape($user_input),避免直接拼接SQL语句,尽量使用CI提供的查询构建器方法。
Q2: 批量插入数据时如何优化性能?
A: 批量插入数据时,性能优化可以通过以下方式实现:1)减少数据库连接次数,确保在一次连接中完成所有插入操作;2)使用insert_batch()方法代替循环调用insert(),减少SQL语句解析开销;3)适当调整批量数据的大小(如每次插入100500条),避免单次数据量过大导致内存溢出;4)如果数据库支持,可以使用LOAD DATA INFILE(MySQL)等原生命令替代批量插入,但需注意CI框架对此的支持情况。
