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基础知识:类与对象(2) 自动加载对象
Dec 13 PHP
php 破解防盗链图片函数
Dec 09 PHP
php中去除所有js,html,css代码
Oct 12 PHP
php实现只保留mysql中最新1000条记录
Jun 18 PHP
PHP编写的图片验证码类文件分享
Jun 06 PHP
PHP中call_user_func_array回调函数的用法示例
Nov 26 PHP
iOS+PHP注册登录系统 PHP部分(上)
Dec 26 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
laravel中的一些简单实用功能
Nov 03 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
Mar 30 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 PHP
在 Laravel 6 中缓存数据库查询结果的方法
Dec 11 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中foreach循环中使用引用要注意的地方
2011/01/02 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
angularjs客户端实现压缩图片文件并上传实例
2015/07/06 Javascript
Javascript中replace()小结
2015/09/30 Javascript
js实现简单计算器
2015/11/22 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
浅谈es6中export和export default的作用及区别
2018/02/07 Javascript
用Python实现一个简单的线程池
2015/04/07 Python
使用Python操作MySQL的一些基本方法
2015/08/16 Python
Python 探针的实现原理
2016/04/23 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
解决pycharm最左侧Tool Buttons显示不全的问题
2019/12/17 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
Python利用myqr库创建自己的二维码
2020/11/24 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
java程序员面试交流
2012/11/29 面试题
物流专员岗位职责
2014/02/17 职场文书
《海底世界》教学反思
2014/04/16 职场文书
小学作文评语大全
2014/04/21 职场文书
如何用python反转图片,视频
2021/04/24 Python
Hive日期格式转换方法总结
2022/06/25 数据库