ThinkPHP5.0 数据库的备份、下载、还原、删除

这篇博客介绍了如何在ThinkPHP5.0中进行数据库的备份、下载、还原和删除操作。作者引用了相关参考文献,并分享了自己整理的文档和代码示例,包括Baksql.php文件的修改和控制器、视图层的实现。提供了H-ui和Bootstrap两种框架的视图写法。
摘要由CSDN通过智能技术生成

参考文档:
https://blog.csdn.net/qq_42455095/article/details/84313754#commentBox
https://blog.csdn.net/qq_42249896/article/details/85238523
https://blog.csdn.net/cplvfx/article/details/86494487
自己整理了一个文档~~~
效果图:
在这里插入图片描述
一、下载类文件
https://github.com/joytom/db_backup
按照下图存放类文件
在这里插入图片描述
我对Baksql.php文件进行了一点改动,代码如下:
主要修改的是get_dbdata方法,我也做了标记

<?php
/**
 * 备份数据库的扩展类
*/
namespace org;

class Baksql {
   
    private $config=[];
    private $handler;
    private $tables = array();//需要备份的表
    private $begin; //开始时间
    private $error;//错误信息

    public function __construct($config) {
   
        /记住创建这个存放备份文件目录,不然会报错
        $config['path']=ROOT_PATH . 'public' . DS .'static'. DS .'data/'; //默认目录
        $config["sqlbakname"]=date("YmdHis",time()).".sql";//默认保存文件
        $this->config = $config;
        
        $this->begin = microtime(true);
        header("Content-type: text/html;charset=utf-8");
        $this->connect();
    }
    //首次进行pdo连接
    private function connect() {
   
        try{
   
           $this->handler =new \PDO("{$this->config['type']}:host={$this->config['hostname']};port={$this->config['hostport']};dbname={$this->config['database']};",
                $this->config['username'],
                $this->config['password'], 
                array(
                    \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES {$this->config['charset']};",
                    \PDO::ATTR_ERRMODE =>  \PDO::ERRMODE_EXCEPTION, 
                    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC
                )); 
        }catch (PDOException $e) {
   
            die ("Error!: " . $e->getMessage() . "<br/>");
        }
        
    }
     /**
     * 查询
     * @param string $sql
     * @return mixed
     */
    private function query($sql = '')
    {
   
        $stmt = $this->handler->query($sql);
        $stmt->setFetchMode(\PDO::FETCH_NUM);
        $list = $stmt->fetchAll();
        return $list;
    }
     /**
     * 获取全部表
     * @param string $dbName
     * @return array
     */
    private function get_dbname($dbName = '*') {
   
         $sql = 'SHOW TABLES';
        $list = $this->query($sql);
        $tables = array();
        foreach ($list as $value)
        {
      
            $tables[] = $value[0];
        }
        return $tables;        
    }
    /**
     * 获取表定义语句
     * @param string $table
     * @return mixed
     */
    private function get_dbhead($table = '')
    {
   
        $sql = "SHOW CREATE TABLE `{$table}`";
        $ddl = $this->query($sql)[0][1] . ';';
        return $ddl;
    }
    /**
     * 获取表数据
     * @param string $table
     * @return mixed
     */
    private function get_dbdata($table = '')
    {
   
        $sql = "SHOW COLUMNS FROM `{$table}`";
        $list = $this->query($sql);
        //字段
        $columns = '';
        //需要返回的SQL
        $query = '';
        foreach ($list as $value)
        {
   
            $columns .= "`{$value[0]}`,";
        }
        $columns = substr($columns, 0, -1);
        $data = $this->query("SELECT * FROM `{$table}`");
        foreach ($data as $value)
        {
   
            $dataSql = '';
      /我的数据库中有 上传图片的路径带有 \特殊字符 备份时消失了
      /数据库时候路径中的反斜杠会丢失,所以导出的时候要再给他加一个反斜杠///
            $value=array_map('addslashes', $value);//给预定义字符加反斜杠
            //原来的代码
//            foreach ($value as $v)
//            {
   
//                $dataSql .= "'{$v}',";
//            }

           
	/1.程序生成的代码,字段没有字符集;主要出现在varchar类型
    /2.程序生成的代码,int字段的数据被加单引号''//
             //修改
     		/**
             * 2019-07-25 xiaoxia  修改后
             * */
            //cp循环次数
            $cp_loop_time=0;
            foreach ($value as $v)
            {
   
                if(strpos($list[$cp_loop_time][1],'int') !== false || strpos($list[$cp_loop_time][1],'double') !== false )
                {
   
                    if($v==null)
                    {
   
                        $dataSql .= "NULL,";
                    }
                    else{
   
                        $dataSql .= "{$v},"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值