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 中使用随机数的三个步骤
Oct 09 PHP
php 文件缓存函数
Oct 08 PHP
探讨:使用XMLSerialize 序列化与反序列化
Jun 08 PHP
有关于PHP中常见数据类型的汇总分享
Jan 06 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
Jun 26 PHP
php+xml实现在线英文词典查询的方法
Jan 23 PHP
php计算两个坐标(经度,纬度)之间距离的方法
Apr 17 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 PHP
PHP防止图片盗用(盗链)的方法小结
Nov 11 PHP
PHP使用curl函数发送Post请求的注意事项
Nov 26 PHP
php中各种定义变量的方法小结
Oct 18 PHP
实例说明js脚本语言和php脚本语言的区别
Apr 04 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
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
jQuery图片播放8款精美插件分享
2013/02/17 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
2017/12/15 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
2020/05/26 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
Cpy和Python的效率对比
2015/03/20 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
python使用代理ip访问网站的实例
2018/05/07 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
最新会计专业求职信范文
2014/01/28 职场文书
银行奉献演讲稿
2014/09/16 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
利用JavaScript写一个简单计算器
2021/11/27 Javascript
vue 自定义组件添加原生事件
2022/04/21 Vue.js