Yii框架批量插入數(shù)據(jù)擴(kuò)展類的簡(jiǎn)單實(shí)現(xiàn)方法
本文實(shí)例講述了Yii框架批量插入數(shù)據(jù)擴(kuò)展類的簡(jiǎn)單實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
MySQL INSERT語(yǔ)句允許插入多行數(shù)據(jù),如下所示:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
那么要實(shí)現(xiàn)批量插入,主要的任務(wù)就是按照列順序,把數(shù)據(jù)組裝成上述格式即可,可以使用sprintf和vsprintf函數(shù)來(lái)實(shí)現(xiàn)。
下面是一個(gè)實(shí)現(xiàn)批量插入的Yii擴(kuò)展類的簡(jiǎn)單示例(支持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();
}
}
使用方法是通過(guò)add方法逐個(gè)加入數(shù)據(jù),然后調(diào)用execute執(zhí)行。
更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開(kāi)發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家基于Yii框架的PHP程序設(shè)計(jì)有所幫助。
- 從零開(kāi)始學(xué)YII2框架(三)擴(kuò)展插件yii2-gird
- 從零開(kāi)始學(xué)YII2框架(二)通過(guò) Composer 安裝擴(kuò)展插件
- 從零開(kāi)始學(xué)YII2框架(四)擴(kuò)展插件yii2-kartikgii
- Yii2分頁(yè)的使用及其擴(kuò)展方法詳解
- Yii2中OAuth擴(kuò)展及QQ互聯(lián)登錄實(shí)現(xiàn)方法
- 詳解PHP的Yii框架中擴(kuò)展的安裝與使用
- Yii安裝與使用Excel擴(kuò)展的方法
- YII視圖整合kindeditor擴(kuò)展的方法
- Yii擴(kuò)展組件編寫(xiě)方法實(shí)例分析
- Yii中srbac權(quán)限擴(kuò)展模塊工作原理與用法分析
- YII框架實(shí)現(xiàn)自定義第三方擴(kuò)展操作示例
相關(guān)文章
PHP讀取CSV大文件導(dǎo)入數(shù)據(jù)庫(kù)的實(shí)例
下面小編就為大家?guī)?lái)一篇PHP讀取CSV大文件導(dǎo)入數(shù)據(jù)庫(kù)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
thinkPHP3.2簡(jiǎn)單實(shí)現(xiàn)文件上傳的方法
這篇文章主要介紹了thinkPHP3.2簡(jiǎn)單實(shí)現(xiàn)文件上傳的方法,重點(diǎn)介紹了thinkPHP實(shí)現(xiàn)文件上傳功能的控制器文件相關(guān)技巧,需要的朋友可以參考下2016-05-05
php編寫(xiě)的一個(gè)E-mail驗(yàn)證類
這篇文章主要介紹了php編寫(xiě)的一個(gè)E-mail驗(yàn)證類的用法,非常的簡(jiǎn)單實(shí)用,需要的小伙伴參考下,可以直接拿走使用。2015-03-03
MacOS下PHP7.1升級(jí)到PHP7.4.15的方法
這篇文章主要介紹了MacOS下PHP7.1升級(jí)到PHP7.4.15的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
Bootstrap+PHP實(shí)現(xiàn)多圖上傳功能實(shí)例詳解
這篇文章主要介紹了Bootstrap+PHP實(shí)現(xiàn)多圖上傳功能實(shí)例詳解,本文圖片加實(shí)例相結(jié)合的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2018-04-04
stripos函數(shù)知識(shí)點(diǎn)實(shí)例分享
在本篇內(nèi)容中我們給大家分享了關(guān)于stripos函數(shù)知識(shí)點(diǎn)實(shí)例內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。2019-02-02
ThinkPHP3.1新特性之動(dòng)態(tài)設(shè)置自動(dòng)完成及自動(dòng)驗(yàn)證示例代碼
這篇文章主要介紹了ThinkPHP3.1的動(dòng)態(tài)設(shè)置自動(dòng)完成及自動(dòng)驗(yàn)證功能,需要的朋友可以參考下2014-06-06

