Yii框架批量插入数据扩展类的简单实现方法


Posted in PHP onMay 23, 2017

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

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

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

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

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

<?php
/**
 * 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 相关文章推荐
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 PHP
php程序的国际化实现方法(利用gettext)
Aug 14 PHP
PHP过滤★等特殊符号的正则
Jan 27 PHP
php筛选不存在的图片资源
Apr 28 PHP
PHP的Socket网络编程入门指引
Aug 11 PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 PHP
php基于curl实现的股票信息查询类实例
Nov 11 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
浅谈thinkphp5 instance 的简单实现
Jul 30 PHP
laravel migrate初学常见错误的解决方法
Oct 11 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
PHP中的自动加载操作实现方法详解
Aug 06 PHP
php利用fsockopen GET/POST提交表单及上传文件
May 22 #PHP
PHP简单实现遍历目录下特定文件的方法小结
May 22 #PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 #PHP
Yii2框架中日志的使用方法分析
May 22 #PHP
浅谈PHP面向对象之访问者模式+组合模式
May 22 #PHP
php readfile下载大文件失败的解决方法
May 22 #PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 #PHP
You might like
PHP 单引号与双引号的区别
2009/11/24 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
Python实现基于权重的随机数2种方法
2015/04/28 Python
浅谈django中的认证与登录
2016/10/31 Python
python实现批量修改文件名代码
2017/09/10 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
Django stark组件使用及原理详解
2019/08/22 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
护理职业生涯规划书
2014/01/24 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
企业整改报告范文
2014/11/08 职场文书
网络研修心得体会
2016/01/08 职场文书
初三数学教学反思
2016/02/17 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书
windows server2012 R2下安装PaddleOCR服务的的详细步骤
2022/09/23 Servers