Yii: 批量插入数据的扩展类简单实现
来源:互联网 发布:桌面办公软件 编辑:程序博客网 时间:2024/04/28 00:30
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执行。
by iefreer
0 0
- Yii: 批量插入数据的扩展类简单实现
- yii批量插入的方法
- Yii批量插入的方法
- 数据的批量插入
- C#实现数据批量插入
- yii 学习笔记值 如何批量像数据库插入数据
- SqlBulkCopy来实现批量插入数据的功能
- 批量插入数据(基于Mybatis的实现-Oracle)
- ibatis 的批量插入 批量更新数据
- 批量插入数据的jsp
- 批量插入数据 SqlBulkCopy类
- MySQL存储过程实现批量插入数据
- 多线程实现数据库批量数据插入
- 使用SqlBulkCopy类进行数据的批量插入
- jdbc批量插入实现大批量数据快速插入
- 批量插入数据解决我的问题 3G数据插入
- EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除
- EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除
- Cocos2d-x学习之windows 7 android环境搭建
- linux中查找命令find、locate、whereis、which、type区别
- 【leetcode】Clone Graph
- hdu 3938 Portal(离线并查集)
- win8下引导win7、XP及开启F8、开启图形界面启动的方法
- Yii: 批量插入数据的扩展类简单实现
- HDU2092
- 恢复F8(恢复到出厂设置)功能
- HDOJ 3401 Trade
- 第一笑话王
- EasyX Library for C++ (Ver:2013冬至版)头文件整理
- 写给linux系统管理员看的systemd 第一部分 (systemd作者blog翻译过来的)
- POJ 3308 最小割模型
- 今天开通博客了,有时间写写自己的经验和感悟吧