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 分页函数multi() discuz
Jun 21 PHP
PHP的博客ping服务代码
Feb 04 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
php通过function_exists检测函数是否存在的方法
Mar 18 PHP
Nginx下配置codeigniter框架方法
Apr 07 PHP
php pthreads多线程的安装与使用
Jan 19 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
php检测mysql表是否存在的方法小结
Jul 20 PHP
阿里云的WindowsServer2016上部署php+apache
Jul 17 PHP
PDO::quote讲解
Jan 29 PHP
解决php写入数据库乱码的问题
Sep 17 PHP
PHP实现递归的三种方法
Jul 04 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
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
php提示undefined index的几种解决方法
2012/05/21 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
vue+axios实现文件下载及vue中使用axios的实例
2018/09/21 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
python 布尔操作实现代码
2013/03/23 Python
python判断字符串是否纯数字的方法
2014/11/19 Python
Python字符串逐字符或逐词反转方法
2015/05/21 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
Python中过滤字符串列表的方法
2020/12/22 Python
大学生入党思想汇报
2014/01/01 职场文书
学生党员思想汇报范文
2014/01/09 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
矿泉水广告词
2014/03/20 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
综合管理员岗位职责
2015/02/11 职场文书
财务工作个人总结
2015/02/27 职场文书
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python