总结
豆包 AI 助手文章总结

详解Yii框架批量插入数据的简单扩展类

*文
发布: 2018-01-03 13:29:26
原创
1484人浏览过

本文主要介绍了yii框架批量插入数据扩展类的简单实现方法,涉及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如何过滤不良代码

Yii解决DeleteAll连表删除报错问题

Yii2整合迅搜实现高效中文分词检索

以上就是详解Yii框架批量插入数据的简单扩展类的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号