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

2025-05-27 0 97

本文实例讲述了Yii框架批量插入数据扩展类的简单实现方法。分享给大家供大家参考,具体如下:

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

?

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

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

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75
<?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框架的PHP程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Yii框架批量插入数据扩展类的简单实现方法 https://www.kuaiidc.com/72413.html

相关文章

发表评论
暂无评论