zoukankan      html  css  js  c++  java
  • yiii 数据库备份导出

    应用场景

    数据对于网站来说 是非常重要的 一般 cms 后台 都有 数据备份功能。使用Yii 的第三方拓展 可以快速开发。

    spanjeta/yii2-backup

    spanjeta/yii2-backup 是基于Yii2 的一款 第三方扩展,安装配置一下可以正常访问,也可以很方便自定义。在开发过程中,因为备份后在 phpMyAdmin 导入出现一些问题。所以做了一些修改。

    安装spanjeta/yii2-backup

    1、写入扩展包

    在项目找到composer.json 打开加入

    "require": {
            "spanjeta/yii2-backup": "*"
        },

    2、安装扩展

    打开cmd 命令 找到项目目录下 执行 (注意:必须先安装 composer ,否则失败)

    composer update

    配置spanjeta/yii2-backup

    找到 ackendconfigmain.php 打开加入以下代码

    return[
        'modules' => [
            'backup' => [
                'class' => 'spanjetamodulesackupModule',
            ],
        ],
    ]

    访问测试数据备份功能

    确保你的项目有创建目录的权限,访问 index.php?r=backup 到此扩展安装完毕

    修改spanjeta/yii2-backup

    默认安装 在vendor 目录下,找到 spanjetayii2-backupcontrollers 打开 DefaultController.php 文件,修改以下代码

    1、找到 getData() 直接覆盖即可

       public function getData($tableName) {
            $sql = 'SELECT * FROM ' . $tableName;
            $cmd = Yii::$app->db->createCommand ( $sql );
            $dataReader = $cmd->query();
            $data_string="";
            foreach ( $dataReader as $data ) {
                
                foreach ($data as $key => $value) {
                    if(empty($value)){
    
                        unset($data[$key]);
                    }else{
                        $datas[$key]=mysql_real_escape_string($value);
                    }
                }
                
                $itemNames = array_keys ( $datas );
    
                $itemNames = array_map ( "addslashes", $itemNames );
    
                $items = join ( '`,`', $itemNames );
    
                $itemValues = array_values ( $datas );
    
                $valueString = join ( "','", $itemValues );
    
                $valueString = "('" . $valueString . "'),";
    
                $values = "
    " . $valueString;
                
                if ($values != "") {
                    $data_string .= "INSERT INTO `$tableName` (`$items`) VALUES" . rtrim ( $values, "," ) . ";" . PHP_EOL;
                }
    
            }
        
            if (empty($data_string)){
                return null;
            }
            
            if ($this->fp) {
                $this->writeComment ( 'TABLE DATA ' . $tableName );
                $final = $data_string . PHP_EOL . PHP_EOL . PHP_EOL;
            
                fwrite ( $this->fp, $final );
            } else {
    
                $this->tables [$tableName] ['data'] = $data_string;
                return $data_string;
            }
        }

    2、搜索以下代码,并注释掉

    fwrite ( $this->fp, 'SET AUTOCOMMIT=0;' . PHP_EOL );

    3、找到 actionCreate() 直接覆盖即可

      public function actionCreate() {
            $tables = $this->getTables ();
            if (! $this->StartBackup ()) {
                Yii::$app->user->setFlash ( 'success', "Error" );
                return $this->render ( 'index' );
            }
            
            foreach ( $tables as $tableName ) {
                $this->getColumns ( $tableName );
                $this->getData ( $tableName );
                
            }
            $this->EndBackup ();
            
            $this->redirect ( array (
                    'index' 
            ) );
        }
  • 相关阅读:
    c++ struct 使用
    c++数组、字符串操作
    c++ List、Vector、Stack、Queue使用
    十三、哈希表
    十二、234树
    十一、红黑树
    十、哈夫曼编码
    九、二叉树
    八、高级排序
    七、递归
  • 原文地址:https://www.cnblogs.com/aini521521/p/7128157.html
Copyright © 2011-2022 走看看