Yii框架批量插入數(shù)據(jù)擴展類的簡單實現(xiàn)方法
本文實例講述了Yii框架批量插入數(shù)據(jù)擴展類的簡單實現(xiàn)方法。分享給大家供大家參考,具體如下:
MySQL INSERT語句允許插入多行數(shù)據(jù),如下所示:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
那么要實現(xiàn)批量插入,主要的任務就是按照列順序,把數(shù)據(jù)組裝成上述格式即可,可以使用sprintf和vsprintf函數(shù)來實現(xiàn)。
下面是一個實現(xiàn)批量插入的Yii擴展類的簡單示例(支持VARCHAR類型數(shù)據(jù)):
<?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方法逐個加入數(shù)據(jù),然后調(diào)用execute執(zhí)行。
更多關于Yii相關內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎教程》、《php面向?qū)ο蟪绦蛟O計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家基于Yii框架的PHP程序設計有所幫助。
相關文章
Bootstrap+PHP實現(xiàn)多圖上傳功能實例詳解
這篇文章主要介紹了Bootstrap+PHP實現(xiàn)多圖上傳功能實例詳解,本文圖片加實例相結(jié)合的形式給大家介紹的非常詳細,需要的朋友可以參考下2018-04-04ThinkPHP3.1新特性之動態(tài)設置自動完成及自動驗證示例代碼
這篇文章主要介紹了ThinkPHP3.1的動態(tài)設置自動完成及自動驗證功能,需要的朋友可以參考下2014-06-06