首页 > PHP教程 > php开发知识文章

php -- Yii框架批量插入数据的实现方法

这篇文章主要介绍了php -- Yii框架批量插入数据的实现方法,涉及Yii扩展类及数据库相关操作技巧,需要的朋友可以参考下

MySQL INSERT语句允许插入多行数据,如下所示:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

那么要实现批量插入,主要的任务就是按照列顺序,把数据组装成上述格式即可,可以使用sprintf和vsprintf函数来实现。

下面是一个实现批量插入的Yii扩展类的简单示例(支持VARCHAR类型数据):

/**
* 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执行。

以上就是本文php -- Yii框架批量插入数据的实现方法的全部内容,希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP Yii框架介绍

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。