首页 > 开发 > PHP > 正文

Yii框架批量插入数据扩展类的简单实现方法

2024-05-04 22:47:33
字体:
来源:转载
供稿:网友

本文实例讲述了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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表