美文网首页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