paperen 发表于 2011-12-12 20:56:03

关于CI中一次插入多条数据

本帖最后由 paperen 于 2011-12-13 17:11 编辑

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


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的,所以没有这个功能说明
$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 static/image/common/back.gif
看你怎么用咯,一次插入多条,就算是直接sql语句的恐怕也不能实现吧?

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

直接用 $this->db->query($sql);执行上面的insert语句就可以一次插入多行了。
当然要注意引号转义防止SQL注入

paperen 发表于 2011-12-13 00:04:30

五点晨曦 发表于 2011-12-12 21:46 static/image/common/back.gif
直接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 static/image/common/back.gif
哈哈,我的意思并不是说用直接使用query,我是针对CI说的Active Record Class来问这个问题的,query显然 ...

Active Record是甚么?

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

要把一个例对应多行?是怎的回事?

paperen 发表于 2011-12-13 09:33:34

燃雲 发表于 2011-12-13 06:56 static/image/common/back.gif
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说的这种感觉就只能一行一行插入了,这是我的理解

Hex 发表于 2011-12-13 12:01:04

燃雲 发表于 2011-12-13 06:56 static/image/common/back.gif
Active Record是甚么?

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

你这个是ORM,而 CI 里的 AR 不是 ORM。
所以要实现楼主说的功能,只能是扩展 AR 的功能。

paperen 发表于 2011-12-13 17:07:43

Hex 发表于 2011-12-13 12:01 static/image/common/back.gif
你这个是ORM,而 CI 里的 AR 不是 ORM。
所以要实现楼主说的功能,只能是扩展 AR 的功能。 ...

管理员,应该要更新一下我们codeigniter中国的用户手册,因为在2.0.3中active record里面已经支持一次插入多个数据了
$this->db->insert_batch();
http://codeigniter.com/user_guide/database/active_record.html#insert

Hex 发表于 2011-12-13 17:10:41

paperen 发表于 2011-12-13 17:07 static/image/common/back.gif
管理员,应该要更新一下我们codeigniter中国的用户手册,因为在2.0.3中active record里面已经支持一次插 ...

感谢提出意见。
手册会尽快进行更新。

longjianghu 发表于 2011-12-14 12:45:36

CI不行的就自己封装
页: [1] 2
查看完整版本: 关于CI中一次插入多条数据