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
邮件: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();
        }
    }
?>

(0)

相关推荐

  • SqlServer将查询结果转换为XML和JSON

    很久之前用到的,现在整理在这,里面一些代码来源于网上,不过有些bug已被我修改了. 1.查询结果转XML DECLARE @ParameterSQL NVARCHAR(MAX)='SELECT * FROM table'; DECLARE @SQL NVARCHAR(MAX) DECLARE @XMLString VARCHAR(MAX) DECLARE @XML XML DECLARE @Paramlist NVARCHAR(1000) SET @Paramlist = N'@XML XML

  • SQL Server中将数据导出为XML和Json方法分享

    有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做,而SQL Server的导入导出工具其中BUG还是蛮多的,最简单的办法是BCP.  数据导出为XML 在SQL Server 2005之后提供了一个for xml子句在关系数据库中原生支持XML.通过该命令可以将二维关系结果集转换为XML,通过BCP就可以将数据存为XML了. 例如下面的数据: 我们可以通

  • 实现SQL Server 原生数据从XML生成JSON数据的实例代码

    实现SQL Server 原生数据从XML生成JSON数据的实例代码 SQL Server 是关系数据库,查询结果通常都是数据集,但是在一些特殊需求下,我们需要XML数据,最近这些年,JSON作为WebAPI常用的交换数据格式,那么数据库如何生成JSON数据呢?今天就写了一个DEMO.        1.创建表及测试数据 SET NOCOUNT ON IF OBJECT_ID('STATS') IS NOT NULL DROP TABLE STATS IF OBJECT_ID('STATIONS

  • 在SQL Server中将数据导出为XML和Json的方法

    有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做,而SQL Server的导入导出工具其中BUG还是蛮多的,最简单的办法是BCP. 数据导出为XML 在SQL Server 2005之后提供了一个for xml子句在关系数据库中原生支持XML.通过该命令可以将二维关系结果集转换为XML,通过BCP就可以将数据存为XML了. 例如下面的数据: 我们可以通过

  • SQL SERVER 将XML变量转为JSON文本

    废话不多说了,直接给大家贴代码了. -- create function create function [dbo].[fnXmlToJson] (@XmlData xml) returns nvarchar(max) as begin return (select stuff( (select * from (select ',{'+ stuff( (select ',"'+ coalesce(b.c.value('local-name(.)', 'NVARCHAR(MAX)'),'')+'&

  • 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(

  • shell 备份数据库、代码上线的脚本

    Shell 脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念. 备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11

  • MySQL定时备份数据库操作示例

    本文实例讲述了MySQL定时备份数据库操作.分享给大家供大家参考,具体如下: 1. 查看mysqldump root@laowang:/# which mysqldump /usr/bin/mysqldump 2. 编写脚本 编辑my.cnf文件, 指定账号与密码, 然后在脚本中引用 root@laowang:/# vim /etc/my.cnf [mysqldump] user=root password=root 脚本文件 root@laowang:/var/backups# vim mys

  • PHP备份数据库生成SQL文件并下载的函数代码

    复制代码 代码如下: <!?php /****** 备份数据库结构 ******/ /* 函数名称:table2sql() 函数功能:把表的结构转换成为SQL 函数参数:$table: 要进行提取的表名 返 回 值:返回提取后的结果,SQL集合 函数作者:heiyeluren */ function table2sql($table) { global $db; $tabledump = "DROP TABLE IF EXISTS $table;n"; $createtable

  • ASP+模板生成Word、Excel、html的代码第1/2页

    大多数都是采用Excel.Application(http://www.blueidea.com/tech/program/2006/3547.asp)组件来生成发现容易出错,而且对于大多数和我一样的菜鸟来说,比较麻烦,考虑到前些天用ASP+模板+adodb.stream生成静态页面的办法,经过多次尝试,终于掌握了一种用ASP+模板生成Excel和word的新的办法,先分享如下: 用模板生成Excel.Word最大优点: Word.Excel文档样式易于控制和调整,以往用Excel.Applic

  • JSP生成WORD文档,EXCEL文档及PDF文档的方法

    本文实例讲述了JSP生成WORD文档,EXCEL文档及PDF文档的方法.分享给大家供大家参考,具体如下: 在web-oa系统中,公文管理好象不可或缺,有时需要从数据库中查询一些数据以某种格式输出来,并以word文档的形式展现,有时许多word文档保存到数据库中的某个表的Blob字段里,服务器再把保存在Blob字段中的图片文件展现给用户.通过网上查找发现很少有关于此类的文章,现在整理起来供大家参考. 1 在client端直接生成word文档 在jsp页面上生成word文档非常简单,只需把conte

  • linux php mysql数据库备份实现代码

    但是出现了问题: 第一.运行php的是apche的用户,比如是nobody,那么它一般是没有权限访问/usr/local/mysql/data目录的 第二.就算能够访问,那么你如何能够把/usr/local/mysql/data目录下的文件拷贝出来呢?因为mysql在运行的时候是不运行访问的,那么nobody用户有权限停止mysql的服务,不可能! 越想越不对劲,没有办法,看能不能从php操作数据库入手,于是就去看了下phpMyadmin和Discuz!的代码,呵呵,于是偷抄了Discuz!的代

  • Python使用win32com模块实现数据库表结构自动生成word表格的方法

    本文实例讲述了Python使用win32com模块实现数据库表结构自动生成word表格的方法.分享给大家供大家参考,具体如下: 下载win32模块 下载链接:https://sourceforge.net/projects/pywin32/files/pywin32/ 连接mysql import MySQLdb db_host = "" db_port = 3306 db_name = "" db_user = "" db_pwd = &quo

  • MyBatis获取数据库自生成的主键Id详解及实例代码

    MyBatis获取数据库自生成的主键Id详解及实例代码 在使用MySQL数据库时我们一般使用数据库的自增主键自动产生主键.如果在插入主表时,我们需要同时插入从表的数据,这时我们通常需要知道主表插入时自动产生的主键Id值. 下面介绍使用MyBatis进行插入时,如何同时获取数据库自生成的主键: 1.XML配置文件 <insert id="insert" parameterType="Person" useGeneratedKeys="true"

  • ASP.NET下备份与还原数据库代码

    核心技术: 复制代码 代码如下: using System.Data.SqlClient; using System.IO; string SqlStr1 = "Server=(local);DataBase=master;Uid=sa;Pwd="; string SqlStr2 = "Exec sp_helpdb"; string SqlStr1 = "Server=(local);database='" + this.DropDownList

随机推荐