Yii框架批量插入数据扩展类的简单实现方法
本文实例讲述了Yii框架批量插入数据扩展类的简单实现方法。分享给大家供大家参考,具体如下:
MySQLINSERT语句允许插入多行数据,如下所示:
INSERTINTOtbl_name(a,b,c)VALUES(1,2,3),(4,5,6),(7,8,9);
那么要实现批量插入,主要的任务就是按照列顺序,把数据组装成上述格式即可,可以使用sprintf和vsprintf函数来实现。
下面是一个实现批量插入的Yii扩展类的简单示例(支持VARCHAR类型数据):
class=$class;
$this->createtpl();
parent::_construct($db);
}
privatefunctioncreatetpl(){
$this->fresh=true;
$value_tpl="";
$columns_string="";
$this->columns=$this->class->getMetaData()->tableSchema->columns;
$counter=0;
foreach($this->columnsas$column){
/**@varCDbColumnSchema$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);
}
/**
*@paramCActiveRecord$record
*/
publicfunctionadd($record){
$values=array();
$i=0;
foreach($this->columnsas$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);
returntrue;
}
publicfunctionexecute(){
$this->setText($this->insert_tpl."".$this->query);
returnparent::execute();
}
}
使用方法是通过add方法逐个加入数据,然后调用execute执行。
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。