本文实例讲述了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框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
# Yii框架
# 批量插入
# 数据
# 扩展类
# 从零开始学YII2框架(三)扩展插件yii2-gird
# 从零开始学YII2框架(二)通过 Composer 安装扩展插件
# 从零开始学YII2框架(四)扩展插件yii2-kartikgii
# Yii2分页的使用及其扩展方法详解
# Yii2中OAuth扩展及QQ互联登录实现方法
# 详解PHP的Yii框架中扩展的安装与使用
# Yii安装与使用Excel扩展的方法
# YII视图整合kindeditor扩展的方法
# Yii扩展组件编写方法实例分析
# Yii中srbac权限扩展模块工作原理与用法分析
# YII框架实现自定义第三方扩展操作示例
# 程序设计
# 是一个
# 相关内容
# 感兴趣
# 给大家
# 可以使用
# 所示
# 更多关于
# 来实现
# 所述
# 面向对象
# 行数
# 操作技巧
# 讲述了
# CDbBICommand
# extends
# CDbCommand
# insert
# lt
# batch
相关文章:
个人摄影网站制作流程,摄影爱好者都去什么网站?
一键网站制作软件,义乌购一件代发流程?
英语简历制作免费网站推荐,如何将简历翻译成英文?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
如何解决ASP生成WAP建站中文乱码问题?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
模具网站制作流程,如何找模具客户?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
如何快速搭建高效WAP手机网站?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
如何快速登录WAP自助建站平台?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
建站之星安装失败:服务器环境不兼容?
Android自定义控件实现温度旋转按钮效果
XML的“混合内容”是什么 怎么用DTD或XSD定义
佛山企业网站制作公司有哪些,沟通100网上服务官网?
手机网站制作与建设方案,手机网站如何建设?
山东网站制作公司有哪些,山东大源集团官网?
如何在云指建站中生成FTP站点?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
定制建站价位费用解析与套餐推荐全攻略
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
海南网站制作公司有哪些,海口网是哪家的?
金*站制作公司有哪些,金华教育集团官网?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
SQL查询语句优化的实用方法总结
建站之星安装后如何自定义网站颜色与字体?
无锡营销型网站制作公司,无锡网选车牌流程?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
大连网站设计制作招聘信息,大连投诉网站有哪些?
,柠檬视频怎样兑换vip?
网站图片在线制作软件,怎么在图片上做链接?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
建站之星×万网:智能建站系统+自助建站平台一键生成
教程网站设计制作软件,怎么创建自己的一个网站?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
学校免费自助建站系统:智能生成+拖拽设计+多端适配
子杰智能建站系统|零代码开发与AI生成SEO优化指南
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
定制建站是什么?如何实现个性化需求?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
,网页ppt怎么弄成自己的ppt?
代购小票制作网站有哪些,购物小票的简要说明?
青岛网站建设如何选择本地服务器?
*请认真填写需求信息,我们会在24小时内与您取得联系。