用户
 找回密码
 入住 CI 中国社区
搜索
查看: 14017|回复: 10
收起左侧

[已解决] 关于CI中一次插入多条数据

[复制链接]
发表于 2011-12-12 20:56:03 | 显示全部楼层 |阅读模式
本帖最后由 paperen 于 2011-12-13 17:11 编辑

我有个疑问,为什么CI只支持一条一条数据地插入,而不支持一次插入多条,难道一次插入多条有什么不好的地方么?


SQL复制代码
INSERT INTO TABLE (FIELDS) VALUES ('1'),('2'),('3')
复制代码

原来的SQL我举错了,我想我知道为什么了,因为不是每个数据库都支持insert into table (fields) values ('1'),('2'),('3')这种写法,mssql里面就不能这样写,如果使用符合Active Record的味道也就只能循环插入了

刚发现,在CI 2.0.3中active record已经支持插入多条数据了,codeigniter网站的用户手册该更新一下了,目前还是2.0.0的,所以没有这个功能说明
PHP复制代码
 $this->db->insert_batch();
复制代码


http://codeigniter.com/user_guide/database/active_record.html#insert


发表于 2011-12-12 21:37:54 | 显示全部楼层
看你怎么用咯,一次插入多条,就算是直接sql语句的恐怕也不能实现吧?
发表于 2011-12-12 21:46:18 | 显示全部楼层
╰↓①秒つ. 发表于 2011-12-12 21:37
看你怎么用咯,一次插入多条,就算是直接sql语句的恐怕也不能实现吧?

直接SQL怎么就不可以插入多条数据了了
INSERT INTO TABLE (FIELDS) VALUES ('1','2','3'),('4','5','6'),('7','8','9');

直接用 $this->db->query($sql);  执行上面的insert语句就可以一次插入多行了。
当然要注意引号转义防止SQL注入
 楼主| 发表于 2011-12-13 00:04:30 | 显示全部楼层
五点晨曦 发表于 2011-12-12 21:46
直接SQL怎么就不可以插入多条数据了了
INSERT INTO TABLE (FIELDS) VALUES ('1','2','3'),('4','5','6'), ...

哈哈,我的意思并不是说用直接使用query,我是针对CI说的Active Record Class来问这个问题的,query显然是可以的,但直接使用query就不能体验Active Record Class的优点了
发表于 2011-12-13 06:56:01 | 显示全部楼层
paperen 发表于 2011-12-13 00:04
哈哈,我的意思并不是说用直接使用query,我是针对CI说的Active Record Class来问这个问题的,query显然 ...

Active Record是甚么?

Active Record是把database table或view看成class,database中的一行(one row)于是成了Active Record中的一个例(one instance)。

要把一个例对应多行?是怎的回事?
 楼主| 发表于 2011-12-13 09:33:34 | 显示全部楼层
燃雲 发表于 2011-12-13 06:56
Active Record是甚么?

Active Record是把database table或view看成class,database中的一行(one row)于 ...
不只是简单,使用 Active Record 的一个主要的优点是允许你创建独立的数据库应用程序,因为查询语法是由数据库的适配器来产生的。


我其实也不太清楚Active Record的实质,或许就如手册里说的,我主要是针对这句“允许你创建独立的数据库应用程序”,也就是说与数据库无关,但是明显INSERT INTO TABLE (FIELDS) VALUES ('1'),('2'),('3')在mssql中是不行的,所以如果要体现CI说的这种感觉就只能一行一行插入了,这是我的理解
发表于 2011-12-13 12:01:04 | 显示全部楼层
燃雲 发表于 2011-12-13 06:56
Active Record是甚么?

Active Record是把database table或view看成class,database中的一行(one row)于 ...

你这个是ORM,而 CI 里的 AR 不是 ORM。
所以要实现楼主说的功能,只能是扩展 AR 的功能。
 楼主| 发表于 2011-12-13 17:07:43 | 显示全部楼层
Hex 发表于 2011-12-13 12:01
你这个是ORM,而 CI 里的 AR 不是 ORM。
所以要实现楼主说的功能,只能是扩展 AR 的功能。 ...

管理员,应该要更新一下我们codeigniter中国的用户手册,因为在2.0.3中active record里面已经支持一次插入多个数据了
PHP复制代码
$this->db->insert_batch();
复制代码

http://codeigniter.com/user_guide/database/active_record.html#insert
发表于 2011-12-13 17:10:41 | 显示全部楼层
paperen 发表于 2011-12-13 17:07
管理员,应该要更新一下我们codeigniter中国的用户手册,因为在2.0.3中active record里面已经支持一次插 ...

感谢提出意见。
手册会尽快进行更新。
发表于 2011-12-14 12:45:36 | 显示全部楼层
CI不行的就自己封装

本版积分规则