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 fsockopen写的HTTP下载的类
Feb 22 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
May 03 PHP
php无限分类且支持输出树状图的详细介绍
Jun 19 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
PHP可变变量学习小结
Nov 29 PHP
制作个性化的WordPress登陆界面的实例教程
May 21 PHP
PHP设计模式之迭代器模式
Jun 17 PHP
php中简单的对称加密算法实现
Jan 05 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
php7下的filesize函数
Sep 30 PHP
PHP多进程简单实例小结
Nov 09 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 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
DC动漫人物排行
2020/03/03 欧美动漫
php 中的4种标记风格介绍
2012/05/10 PHP
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
深入解析php之apc
2013/05/15 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
php简单实现查询数据库返回json数据
2015/04/16 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
python中__slots__用法实例
2015/06/04 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
python 文件查找及内容匹配方法
2018/10/25 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
宾馆总经理岗位职责
2014/02/14 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
优秀员工获奖感言
2014/03/01 职场文书
小学语文国培感言
2014/03/04 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
机器人总动员观后感
2015/06/09 职场文书
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫