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

单表备份
代码:

复制代码代码如下:

<?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
邮件:[email protected]
*
*************/
    $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();
        }
    }
?>

  

时间: 2024-10-13 19:10:59

php 备份数据库代码(生成word,excel,json,xml,sql)的相关文章

SQL备份数据库代码

#region 服务每天备份一次数据库 /// <summary> /// 服务每天备份一次数据库 /// </summary> public void ServiceForBackupDatabaseEveryDay() { Thread thread = new Thread(new ThreadStart(BackupDatabaseEveryDay)); thread.IsBackground = true; thread.Start(); } private void B

通过xml生成word文档

Xml生成word总结 使用xml生成word的基本步骤在<使用xslt转化xml数据形成word文档导出.doc>中说明比较清楚了.但是其中的细节并未说到,因此自己折腾了两天总算成功了.以下是我在使用过程中碰到的问题要点: 必须使用word 2003. 1.下面通过例子演示: 简单 的xml以及对应的xml框架 2.分别创建03版本的word文档log_03.doc和o7版本的word文档log_07.docx,并都应用以上生成的log.xsd框架 分别另存为log_03_doc.xml,l

SQL Server 定时自动备份数据库

在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库,这篇文章介绍使用SQL Server 数据库代理中的作业定时自动备份数据库. 1.启动SQL Server代理服务,如下图: 绿色角标说明已启动. 2.右键“作业”,选择“新建作业”,弹出新建作业对话框,如下: 3.输入名称,所有者.类别默认不用修改,点击左侧“步骤”,在步骤面板中新建步骤,如下图: 输入步骤名(自定义)和命令. 命令代码: declare @name varchar(250) set @name='C:\My

从SSMS中复制代码到Word中数字消失--没解决&amp;&amp;Excel连接SQL Server数据库

1.因工作需要需把SSMS中的代码复制到word中,可发现一个问题: 从SQL Server2008的SSMS中复制代码到Word 2013中,如果是中文汉字+阿拉伯数字,阿拉伯数字会消失.如果是英文+阿拉伯数字就没有问题.在网上也没找到方法,问一哥们,他说我们都是英文,没遇到过.记录下来吧 2.每次发的数据都在数据库中,之前都是select * from TableName,然后"连同标题一起复制",然后再粘贴到Excel中.但其实excel可以连接SQL Server的,其实操作很

java 生成简单word(利用Itext工具),生成简单Excel,以及下载笔记

1.java 生成简单word(包含图片表格) pom中加入itext 相关依赖 <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency> <dependency> <groupId>com.lowagie</gr

java读取WORD/EXCEL模板转换生成新WORD/EXCEL文档

原文:java读取WORD/EXCEL模板转换生成新WORD/EXCEL文档 代码下载地址:http://www.zuidaima.com/share/1550463239670784.htm 可以通过预先设置指定的excel和word模板,通过替换文档里面指定的标志来生成新的excel和word文档.excel的部分只是实现了简单的方法.word部分可以支持word2003和word2007格式.建议word使用07及其以上. 其实excel部分标签和jstl很像,而且支持循环等.word就支

分享:mysql异地数据库备份实例代码

分享:mysql异地数据库备份实例代码 mysql现在应用在操作系统中包括有linux系统与windows系统,下面是多备份分享常用的两种系统中实现mysql异地数据库备份,有需要了解的朋友可参考. windows的任务计划定时执行该文件. 文件内容如下: cd F:/MySQLBackup f: mysqldump -h ip -uusername -ppassworddbname>F:/MySQLBackup/PersonBackupMonday.sql username:数据库用户 pas

POI加dom4j将数据库的数据按一定格式生成word文档

一:需求:将从数据库查处来的数据,生成word文档,并有固定的格式.(dom4j的jar包+poi的jar包) 二:解决:(1)先建立固定格式的word文档(2007版本以上),另存成为xml文件,作为模板.(修改xml节点,添加属性,用于标示要填固定数据的节点) (2)dom4j解析模板xml文件,将文件读入内存,并把数据库数据写入内存的xml模型中 (3)利用poi将内存中的含有数据库内容的xml模型转换成word内存模型,利用输出流输出word文档 三:DEMO [1]模板的word文档

freeMarker生成word,excel文档

以前导出文档一直使用poi技术,这个项目使用freemarker技术,然后看了一下,发现比poi简单多了.于是发表一下. FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件. 首先,把你要导出的word文档另存为xml格式,然后使用记事本将它打开,将动态生成的代码用el表达式(jstl标签)替换. 示例如下: wor