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 相关文章推荐
PHP集成FCK的函数代码
Sep 27 PHP
网页游戏开发入门教程三(简单程序应用)
Nov 02 PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 PHP
php中json_encode中文编码问题分析
Sep 13 PHP
php生成局部唯一识别码LUID的代码
Oct 06 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
php支付宝接口用法分析
Jan 04 PHP
php 类自动载入的方法
Jun 03 PHP
PHP中SSO Cookie登录分析和实现
Nov 06 PHP
PHP全功能无变形图片裁剪操作类与用法示例
Jan 10 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
Dec 13 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跨站刷票的实现代码
2013/06/18 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
vue中用H5实现文件上传的方法实例代码
2017/05/27 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
Python实现的读写json文件功能示例
2018/06/05 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
基于python实现名片管理系统
2018/11/30 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
新员工培训个人的自我评价
2013/10/09 职场文书
教师推荐信范文
2013/11/24 职场文书
公务员政审个人鉴定
2014/02/25 职场文书
法律进社区实施方案
2014/03/21 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
项目经理任命书内容
2014/06/06 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
区长工作作风个人整改措施
2014/10/01 职场文书