美文网首页PHP
PHP对Mysql备份并提供下载到本地

PHP对Mysql备份并提供下载到本地

作者: DouDouZH | 来源:发表于2018-01-16 17:14 被阅读0次

    一、主要思想

    1、需要备份Mysql数据库为name.sql文件
    2、name.sql文件本质是sql语句
    3、连接需要备份的数据库
    4、创建要下载的文件名,内容变量
    5、获取每个数据表的详细结构语句写进文件内容变量
    $contents.=查到的数据表详细结构;

    image.png

    6、查询每个表的表头以及数据

    image.png
    7、把数据对照表头写成插入sql语句写进文件内容变量
    $contents.=insert…… ;
    image.png
    8、定义php中header()函数 下载文件
        header("Content-disposition:filename=".$filename); 
        header("Content-type:application/octetstream"); 
        header("Pragma:no-cache"); 
        header("Expires:0"); 
    

    9、输出写好的文件变量
    echo $contents;

    二、代码

    <?php
    ob_start();
    session_start();
    //页面加密验证是否登录
    if($_SESSION['admin']!=''){
        //连接数据库
        $conn=mysql_connect("localhost","root","root");
        mysql_select_db("evaluation_system",$conn);
        mysql_query("set names utf8");
        
        //要备份的数据库名
        $dbname="evaluation_system";
        //定义备份后要下载的文件名
        $filename="evaluation_system-backup-".gmdate("Y-m-d").".sql";
        //备份文件里头的内容 目前为空    
        $contents="";
        
        //定义下载文件
        header("Content-disposition:filename=".$filename); 
        header("Content-type:application/octetstream"); 
        header("Pragma:no-cache"); 
        header("Expires:0"); 
        
        //查询数据库中的所有表名
        $sql_tablist="show tables"; 
        $rs_tablist=mysql_query($sql_tablist); 
        while($tablist=mysql_fetch_assoc($rs_tablist)){
            //echo $tablist['Tables_in_'.$dbname]."</br>";
            //查询每个标的创建详细信息
            $sql_createtab="show create table `".$tablist['Tables_in_'.$dbname]."`";
            $rs_createtab=mysql_query($sql_createtab);
            $createtab=mysql_fetch_assoc($rs_createtab);
            //每个标的创建信息写入文件内容变量
            $contents.="\r\t".$createtab['Create Table'].";\r\t";
            
            //备份文件要插入的数据也写入文件内容变量
            $contents.="insert into ".$tablist['Tables_in_'.$dbname]."(";
            //查询每个表的表头
            $sql_desctab="desc `".$tablist['Tables_in_'.$dbname]."`";
            $rs_desctab=mysql_query($sql_desctab);
            $recordcount=mysql_num_rows($rs_desctab);       //统计所有行数
            $sum=0;
            //把查询到的表头记录在数组里头
            $array=array();
            while($desctab=mysql_fetch_assoc($rs_desctab)){
                $array[]=$desctab['Field'];
                $contents.="`".$desctab['Field']."`";
                if(++$sum<$recordcount){
                    $contents.=",";
                }
            }
            $contents.=") values\r\t";
            
            //查询每个表的所有数据
            $sql_data="select * from `".$tablist['Tables_in_'.$dbname]."` ";
            $rs_data=mysql_query($sql_data); 
            $recordcount1=mysql_num_rows($rs_data);       //统计所有行数
            
            //根据表头把数据按顺序写进文件内容变量
            $sum1=0;
            while($data=mysql_fetch_assoc($rs_data)){
                $contents.="(";
                $sum=0;
                foreach($array as $value){
                    $contents.="'".$data[$value]."'";
                    if(++$sum<$recordcount){
                    $contents.=",";
                    }   
                }
                $contents.=")";
                if(++$sum1<$recordcount1){
                    $contents.=",\r\t";
                }
            }
            $contents.=";";
        }
        //输出数据
        echo $contents;
    }
    //没登陆就跳到登录界面
    else echo "<script language='javascript'>top.location.href='index.php'</script>";
    ?>
    

    相关文章

      网友评论

        本文标题:PHP对Mysql备份并提供下载到本地

        本文链接:https://www.haomeiwen.com/subject/fhzsoxtx.html