php 备份数据库代码(生成word,excel,json,xml,sql)


Posted in PHP onJune 23, 2013

单表备份
代码:

<?php    
class Db    
{    
    var $conn;        function Db($host="localhost",$user="root",$pass="root",$db="test")    
    {    
      if(!$this->conn=mysql_connect($host,$user,$pass))    
      die("can't connect to mysql sever");    
      mysql_select_db($db,$this->conn);    
      mysql_query("SET NAMES 'UTF-8'");    
    }    
    function execute($sql)    
    {    
       return mysql_query($sql,$this->conn);    
    }    
    function findCount($sql)    
    {    
        $result=$this->execute($sql);    
        return mysql_num_rows($result);    
    }    
    function findBySql($sql)    
    {    
        $array=array();    
        $result=mysql_query($sql);    
        $i=0;    
        while($row=mysql_fetch_assoc($result))    
           {    
          $array[$i]=$row;     
       $i++;    
           }    
        return $array;    
    }    
    //$con的几种情况    
    //空:返回全部记录    
    //array:eg. array('id'=>'1') 返回id=1的记录    
    //string :eg. 'id=1' 返回id=1的记录    
    function toExtJson($table,$start="0",$limit="10",$cons="")    
    {    
       $sql=$this->generateSql($table,$cons);    
       $totalNum=$this->findCount($sql);    
       $result=$this->findBySql($sql." LIMIT ".$start." ,".$limit);    
       $resultNum = count($result);//当前结果数    
      $str="";    
      $str.= "{";    
      $str.= "'totalCount':'$totalNum',";    
      $str.="'rows':";    
      $str.="[";    
      for($i=0;$i<$resultNum;$i++){    
       $str.="{";     
       $count=count($result[$i]);    
       $j=1;    
       foreach($result[$i] as $key=>$val)    
       {    
       if($j<$count)    
       {    
       $str.="'".$key."':'".$val."',";    
       }    
       elseif($j==$count)    
       {    
       $str.="'".$key."':'".$val."'";    
       }    
       $j++;    
                }    
       $str.="}";    
       if ($i != $resultNum-1) {    
                 $str.= ",";    
             }    
      }    
      $str.="]";    
      $str.="}";    
      return $str;      
    }    
    function generateSql($table,$cons)    
    {    
        $sql="";//sql条件    
       $sql="select * from ".$table;    
       if($cons!="")    
       {    
       if(is_array($cons))    
       {    
         $k=0;    
         foreach($cons as $key=>$val)    
      {    
      if($k==0)    
      {    
      $sql.="where '";    
      $sql.=$key;    
      $sql.="'='";    
      $sql.=$val."'";    
      }else  
      {    
      $sql.="and '";    
      $sql.=$key;    
      $sql.="'='";    
      $sql.=$val."'";    
      }    
      $k++;    
      }    
       }else  
       {    
       $sql.=" where ".$cons;    
       }    
       }    
       return $sql;    
    }    
    function toExtXml($table,$start="0",$limit="10",$cons="")    
    {    
       $sql=$this->generateSql($table,$cons);    
       $totalNum=$this->findCount($sql);    
       $result=$this->findBySql($sql." LIMIT ".$start." ,".$limit);    
       $resultNum = count($result);//当前结果数    
       header("Content-Type: text/xml");    
       $xml="<?xml version=\"1.0\"  encoding=\"utf-8\" ?>\n";    
       $xml.="<xml>\n";    
       $xml.="\t<totalCount>".$totalNum."</totalCount>\n";    
       $xml.="\t<items>\n";    
       for($i=0;$i<$resultNum;$i++){    
       $xml.="\t\t<item>\n";    
       foreach($result[$i] as $key=>$val)    
       $xml.="\t\t\t<".$key.">".$val."</".$key.">\n";    
       $xml.="\t\t</item>\n";    
       }    
        $xml.="\t</items>\n";    
        $xml.="</xml>\n";    
        return $xml;    
    }    
    //输出word表格    
    function toWord($table,$mapping,$fileName)    
    {    
       header('Content-type: application/doc');     
          header('Content-Disposition: attachment; filename="'.$fileName.'.doc"');     
          echo '<html xmlns:o="urn:schemas-microsoft-com:office:office"    
           xmlns:w="urn:schemas-microsoft-com:office:word"    
           xmlns="[url=http://www.w3.org/TR/REC-html40]http://www.w3.org/TR/REC-html40[/url]">    
        <head>    
           <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />    
        <title>'.$fileName.'</title>    
        </head>    
        <body>';     
        echo'<table border=1><tr>';    
        if(is_array($mapping))    
        {    
          foreach($mapping as $key=>$val)    
       echo'<td>'.$val.'</td>';    
        }    
        echo'</tr>';    
        $results=$this->findBySql('select * from '.$table);    
        foreach($results as $result)    
        {    
          echo'<tr>';    
          foreach($result as $key=>$val)    
       echo'<td>'.$val.'</td>';    
       echo'</tr>';    
        }    
        echo'</table>';    
        echo'</body>';    
        echo'</html>';    
    }    
    function toExcel($table,$mapping,$fileName)    
    {    
      header("Content-type:application/vnd.ms-excel");    
         header("Content-Disposition:filename=".$fileName.".xls");    
      echo'<html xmlns:o="urn:schemas-microsoft-com:office:office"  
           xmlns:x="urn:schemas-microsoft-com:office:excel"  
           xmlns="[url=http://www.w3.org/TR/REC-html40]http://www.w3.org/TR/REC-html40[/url]">    
           <head>    
           <meta http-equiv="expires" content="Mon, 06 Jan 1999 00:00:01 GMT">    
           <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">    
           <!--[if gte mso 9]><xml>    
           <x:ExcelWorkbook>    
               <x:ExcelWorksheets>    
                       <x:ExcelWorksheet>    
                           <x:Name></x:Name>    
                           <x:WorksheetOptions>    
                               <x:DisplayGridlines/>    
                           </x:WorksheetOptions>    
                       </x:ExcelWorksheet>    
               </x:ExcelWorksheets>    
           </x:ExcelWorkbook>    
           </xml><![endif]-->    
           </head>    
        <body link=blue vlink=purple leftmargin=0 topmargin=0>';     
        echo'<table width="100%" border="0" cellspacing="0" cellpadding="0">';    
           echo'<tr>';    
        if(is_array($mapping))    
        {    
          foreach($mapping as $key=>$val)    
       echo'<td>'.$val.'</td>';    
        }    
        echo'</tr>';    
        $results=$this->findBySql('select * from '.$table);    
        foreach($results as $result)    
        {    
          echo'<tr>';    
          foreach($result as $key=>$val)    
       echo'<td>'.$val.'</td>';    
       echo'</tr>';    
        }    
        echo'</table>';    
        echo'</body>';    
        echo'</html>';    
    }    
    function Backup($table)    
    {    
      if(is_array ($table))    
      {    
       $str="";    
       foreach($table as $tab)    
       $str.=$this->get_table_content($tab);    
       return $str;    
      }else{    
       return $this->get_table_content($table);    
      }    
    }    
    function Backuptofile($table,$file)    
    {    
      header("Content-disposition: filename=$file.sql");//所保存的文件名    
      header("Content-type: application/octetstream");    
      header("Pragma: no-cache");    
      header("Expires: 0");    
      if(is_array ($table))    
      {    
       $str="";    
       foreach($table as $tab)    
       $str.=$this->get_table_content($tab);    
       echo $str;    
      }else{    
       echo $this->get_table_content($table);    
      }    
    }    
    function Restore($table,$file="",$content="")    
    {    
      //排除file,content都为空或者都不为空的情况    
      if(($file==""&&$content=="")||($file!=""&&$content!=""))    
      echo"参数错误";    
      $this->truncate($table);    
      if($file!="")    
      {    
       if($this->RestoreFromFile($file))    
       return true;    
       else  
       return false;    
      }    
      if($content!="")    
      {    
       if($this->RestoreFromContent($content))    
       return true;    
       else  
       return false;    
      }    
    }    
    //清空表,以便恢复数据    
    function truncate($table)    
    {    
      if(is_array ($table))    
      {    
       $str="";    
       foreach($table as $tab)    
       $this->execute("TRUNCATE TABLE $tab");    
      }else{    
       $this->execute("TRUNCATE TABLE $table");    
      }    
    }    
    function get_table_content($table)    
    {    
      $results=$this->findBySql("select * from $table");    
      $temp = "";    
      $crlf="<br>";    
      foreach($results as $result)    
      {    
       /*(";   
      foreach($result as $key=>$val)   
      {   
       $schema_insert .= " `".$key."`,";   
      }   
      $schema_insert = ereg_replace(",$", "", $schema_insert);   
      $schema_insert .= ")    
      */  
      $schema_insert = "INSERT INTO  $table VALUES (";    
      foreach($result as $key=>$val)    
      {    
       if($val != "")    
       $schema_insert .= " '".addslashes($val)."',";    
       else  
       $schema_insert .= "NULL,";    
      }    
      $schema_insert = ereg_replace(",$", "", $schema_insert);    
      $schema_insert .= ");$crlf";    
      $temp = $temp.$schema_insert ;    
      }    
      return $temp;    
    }    
    function RestoreFromFile($file){    
      if (false !== ($fp = fopen($file, 'r'))) {    
       $sql_queries = trim(fread($fp, filesize($file)));    
       $this->splitMySqlFile($pieces, $sql_queries);    
       foreach ($pieces as $query) {    
        if(!$this->execute(trim($query)))    
        return false;    
       }    
       return true;    
      }    
      return false;    
    }    
    function RestoreFromContent($content)    
    {    
      $content = trim($content);    
      $this->splitMySqlFile($pieces, $content);    
      foreach ($pieces as $query) {    
       if(!$this->execute(trim($query)))    
       return false;    
      }    
      return true;    
    }    
    function splitMySqlFile(&$ret, $sql)    
    {    
      $sql= trim($sql);    
      $sql=split(';',$sql);    
      $arr=array();    
      foreach($sql as $sq)    
      {    
        if($sq!="");    
        $arr[]=$sq;    
      }    
      $ret=$arr;    
      return true;    
    }    
}    
$db=new db();    
// 生成 word     
//$map=array('No','Name','Email','Age');    
//echo  $db->toWord('test',$map,'档案');    
// 生成 Excel     
//$map=array('No','Name','Email','Age');    
//echo  $db->toExcel('test',$map,'档案');    
// 生成 Xml     
//echo  $db->toExtXml('test',0,20);    
// 生成 Json     
//echo  $db->toExtJson('test',0,20);    
//备份        
//echo $db->Backuptofile('test','backup');    
?>

整表备份
$link = mysql_connect(DB_HOST,DB_USER,DB_PASS);
$tables = mysql_list_tables(DB_NAME);
$cachetables = array(); $tableselected = array();
while ($table = mysql_fetch_row($tables))
{
   $cachetables[$table[0]] = $table[0];
   $tableselected[$table[0]] = 1;
}
$table = $cachetables;
$filename =  DB_NAME . "_" . date("Y_m_d_H_i_s") . ".sql";
$path = "sql/" . $filename;
$filehandle = fopen($path, "w");
$result = mysql_query("SHOW tables");
while ($currow = mysql_fetch_array($result))
{
   if (isset($table[$currow[0]]))
   {
     sqldumptable($currow[0], $filehandle);
     fwrite($filehandle, "\n\n\n");
   }
}
fclose($filehandle);
$update_data = array('filename' => $filename, 'postdate' => mktime());
$db->insert('backup_db', $update_data);
// data dump functions
function sqldumptable($table, $fp = 0)
{
    $tabledump = "DROP TABLE IF EXISTS " . $table . ";\n";
    $result = mysql_fetch_array(mysql_query("SHOW CREATE TABLE " . $table));
    //echo "SHOW CREATE TABLE $table";
    $tabledump .= $result[1] . ";\r\n";
    if ($fp) {
        fwrite($fp, $tabledump);
    } else {
        echo $tabledump;
    }
    // get data
    $rows = mysql_query("SELECT * FROM " . $table);
    // $numfields=$DB->num_fields($rows);
    $numfields = mysql_num_fields($rows);
    while ($row = mysql_fetch_array($rows)) {
        $tabledump = "INSERT INTO " . $table . " VALUES(";
        $fieldcounter = -1;
        $firstfield = 1;
        // get each field's data
        while (++$fieldcounter < $numfields) {
            if (!$firstfield) {
                $tabledump .= ", ";
            } else {
                $firstfield = 0;
            }
            if (!isset($row[$fieldcounter])) {
                $tabledump .= "NULL";
            } else {
                $tabledump .= "'" . mysql_escape_string($row[$fieldcounter]) . "'";
            }
        }
        $tabledump .= ");\n";
        if ($fp) {
            fwrite($fp, $tabledump);
        } else {
            echo $tabledump;
        }
    }
    mysql_free_result($rows);
}

导入数据库
<?php
/************
*
PHP导入.sql文件
运行版本:php5,php4 使用的时候请选择
作者:panxp
邮件:coolpan123@gmail.com
*
*************/
    $file_dir = dirname(__FILE__);
    $file_name = "2010-05-09-bak.sql";
    $conn = mysql_connect(DB_HOST,DB_USER,DB_PASS);
    mysql_select_db(DB_NAME, $conn);
    /** PHP5 版本 **/
    $get_sql_data = file_get_contents($file_name, $file_dir);
    /**  
    * PHP4 版本
    if(file_exists($file_dir."/".$file_name)) 
    {
        $get_sql_data = fopen($file_dir."/".$file_name,"r");   
        if(!$get_sql_data) 
        {
            echo "不能打开文件";
        } 
        else 
        {
            $get_sql_data = fread($get_sql_data, filesize ($file_dir."/".$file_name));
        }
    }
    ***/
    $explode = explode(";", $get_sql_data);
    $cnt = count($explode);
    for ($i=0; $i<$cnt; $i++) 
    {
        $sql = $explode[$i];
        $result = mysql_query($sql);
        mysql_query("set names 'utf8'");
        if ($result) {
            echo "成功:".$i."个查询<br>";
        } else {
            echo "导入失败:".mysql_error();
        }
    }
?>

PHP 相关文章推荐
php Xdebug 调试扩展的安装与使用.
Mar 13 PHP
在PHP中实现Javascript的escape()函数代码
Aug 08 PHP
从php核心代码分析require和include的区别
Jan 02 PHP
php Session存储到Redis的方法
Nov 04 PHP
一个基于phpQuery的php通用采集类分享
Apr 09 PHP
PHP实现的下载远程图片自定义函数分享
Jan 28 PHP
Zend Framework实现多文件上传功能实例
Mar 21 PHP
PHP实现适用于自定义的验证码类
Jun 15 PHP
PHP中spl_autoload_register()函数用法实例详解
Jul 18 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
Dec 09 PHP
PHPstorm快捷键(分享)
Jul 17 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
Sep 25 PHP
PHP获取MSN好友列表类的实现代码
Jun 23 #PHP
使用php统计字符串中中英文字符的个数
Jun 23 #PHP
php 获取本地IP代码
Jun 23 #PHP
解析PHP提交后跳转
Jun 23 #PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 #PHP
解析MySql与Java的时间类型
Jun 22 #PHP
解析mysql 表中的碎片产生原因以及清理
Jun 22 #PHP
You might like
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
smarty简单入门实例
2014/11/28 PHP
php中static和const关键字用法分析
2016/12/07 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
python发送arp欺骗攻击代码分析
2014/01/16 Python
Python脚本实现格式化css文件
2015/04/08 Python
python实现批量图片格式转换
2020/06/16 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
python+opencv实现车道线检测
2021/02/19 Python
html5与css3小应用
2013/04/03 HTML / CSS
模具专业推荐信
2013/10/30 职场文书
招聘专员岗位职责
2014/03/07 职场文书
安全生产宣传标语
2014/06/06 职场文书
销售口号大全
2014/06/11 职场文书
综合素质自我评价评语
2015/03/06 职场文书
行政处罚告知书
2015/07/01 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫