本文实例讲述了Yii框架批量插入数据扩展类的简单实现方法。分享给大家供大家参考,具体如下:

MySQL INSERT语句允许插入多行数据,如下所示:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

那么要实现批量插入,主要的任务就是按照列顺序,把数据组装成上述格式即可,可以使用sprintf和vsprintf函数来实现。

下面是一个实现批量插入的Yii扩展类的简单示例(支持VARCHAR类型数据):

/**

* class for sql batch insert

*/

class CDbBICommand extends CDbCommand{

/** @var CActiveRecord $class */

private $class;

/** @var string $insert_tpl */

private $insert_tpl = "insert into %s(%s) ";

/** @var string $value_tpl */

private $value_tpl = "(%s)";

/** @var string $query */

public $query;

/** @var CDbColumnSchema[] $columns */

private $columns;

/** @var boolean $fresh */

private $fresh;

/** @param CActiveRecord $class

* @param CDbConnection $db

*/

public function __construct($class,$db){

$this->class = $class;

$this->createtpl();

parent::_construct($db);

}

private function createtpl(){

$this->fresh = true;

$value_tpl = "";

$columns_string = "";

$this->columns = $this->class->getMetaData()->tableSchema->columns;

$counter = 0;

foreach($this->columns as $column){

/** @var CDbColumnSchema $column */

if($column->autoIncrement){

$value_tpl .= "0";

}else{

$value_tpl .= "\"%s\"";

}

$columns_string .= $column->name;

$counter ++;

if($counter != sizeof($this->columns)){

$columns_string .= ", ";

$value_tpl .= ", ";

}

}

$this->insert_tpl = sprintf($this->insert_tpl, $this->class->tableName(), $columns_string);

$this->value_tpl = sprintf($this->value_tpl, $value_tpl);

}

/**

* @param CActiveRecord $record

*/

public function add($record){

$values = array();

$i = 0;

foreach($this->columns as $column){

if($column->autoIncrement){

continue;

}

$values[$i] = $this->class->{$column->name};

$i ++;

}

if(!$this->fresh){

$this->query .= ",";

}else{

$this->query = "values";

}

$this->fresh = false;

$this->query .= vsprintf($this->value_tpl, $values);

return true;

}

public function execute(){

$this->setText($this->insert_tpl." ".$this->query);

return parent::execute();

}

}

使用方法是通过add方法逐个加入数据,然后调用execute执行。

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

php批量新增数据类型,Yii框架批量插入数据扩展类的简单实现方法相关推荐

  1. php yii 插入,YII框架批量插入数据的方法

    本文实例讲述了YII框架批量插入数据的方法.分享给大家供大家参考,具体如下: public function insertSeveral($table, $array_columns) { $sql ...

  2. SQL Server 批量插入数据方案 SqlBulkCopy 的简单封装,让批量插入更方便

    在线工具 一.Sql Server插入方案介绍 关于 SqlServer 批量插入的方式,有三种比较常用的插入方式,Insert.BatchInsert.SqlBulkCopy,下面我们对比以下三种方 ...

  3. MyBatis框架——mybatis插入数据返回主键(mysql、oracle)

    向数据库中插入数据时,大多数情况都会使用自增列或者UUID做为主键.主键的值都是插入之前无法知道的,但很多情况下我们在插入数据后需要使用刚刚插入数据的主键,比如向两张关联表A.B中插入数据(A的主键是 ...

  4. oracle新增id怎么写,oracle插入数据时自增ID的解决思路

    一直在用MySQL,从来没有为自增ID发过愁,这初到oracle上,连自增ID都让我挠头,好在互联网资源丰富,我在充分吸取精华后,把我的一点经验总结出来给大家分享分享- 1. 创建一个sequence ...

  5. php插入数据含有特殊符号的处理方法

    转自:http://www.cnblogs.com/lvcha/archive/2013/11/26/3443358.html 我们在向mysql写入数据时,比如: mysql_query (&quo ...

  6. 视频批量剪辑,将横屏视频改成竖屏最简单的方法

    随着互联网的崛起,很多人在拍摄视频的时候没有去注意横屏还是竖屏,拍完了才发现不合适,这时可以借助一些技巧,去快速将多段横屏视频改为竖屏视频,小编今天分享操作方法,有需要的朋友一起来看看. 第一步,运行 ...

  7. Yii 框架网页播放器扩展,百度影音、优酷、搜狐等

    2019独角兽企业重金招聘Python工程师标准>>> 下载源码 yii-web-player, 解压后放到 extensions 文件夹下. 在 view 中使用如下代码: 注意: ...

  8. php怎么读取excel里的数据类型,php读取excel表格数据-对PHPExcel一些简单的理解 及怎么读取单元格数据...

    php读取excel,excel下多个个工作表,该怎么读取 php读取excel,excel下多个个工作表的方法: 1.利用PHPExcelReader来完成多个excel的读取. 2.PHPExce ...

  9. 关于ssh框架中hibernate扫描实体类的两种方法annotatedClasses和packagesToScan

    [Hibernate]spring整合hibernate扫描实体类的两种方法annotatedClasses和packagesToScan的异同

最新文章

  1. 内含福利|CSDN 携手字节跳动:云原生Meetup北京站报名热烈启动,1月8日见!
  2. 任正非:要感谢特朗普,他一吓唬,治好了华为人的富裕病,都努力工作了
  3. FFmpeg迎来20周年生日!凭一己之力养活全球无数播放器!
  4. 搭建elsticsearch集群 报错 failed to send join request to master [{data-node-0}(已经测试)
  5. [网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap普及
  6. 前端学习(2267)vue造轮子之添加icon
  7. android P版本ro.build.date时间修改
  8. 第三届IEEE普适媒体计算国际会议(U-Media 2010
  9. extend Thread 和 implements Runnable
  10. MATLAB图像处理(一)——计算机图形学之图像形状识别
  11. nginx 配置基于域名的虚拟主机
  12. 能量英语(一)之激情英语
  13. 入门Retrofit,看这一篇就够了
  14. 存储器——嵌入式系统
  15. 2021SC@SDUSC-Zxing(一):Zxing初步认识
  16. linux命令详解及软件安装(全)
  17. 转:浅析镜头分辨率和MTF测试
  18. 推荐一个单干网赚好站!BUXJOB - 生活至上,美容至尚!
  19. VS2015程序工程的ICO图标研究
  20. (详细教程)opencv+pycharm+笔记本摄像头 做一个人脸识别

热门文章

  1. DSDV的问题(Problems of DSDV)
  2. 大学一年级计算机教程视频教程,大学一年级公开课《计算机基础教程》期末试题复习.doc...
  3. thinkphp数据库连接池_Thinkphp5框架下的数据库连接
  4. gulp : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\gulp.ps1,因为在此系统上禁止运行脚本
  5. linus系统下载_系统管理程序卷土重来,Linus拒绝并阅读电子邮件,以及更多行业趋势
  6. tor 127.0.0.1_如何创建虚荣Tor .onion网站地址
  7. 30,000人如何帮助挑选新的Bash徽标
  8. 教育为什么重要 大数据_为什么开放数据在教育中很重要
  9. openstack_Facebook的WebScaleSQL,思科投资OpenStack等
  10. (15)HTML面试题集锦