设为首页 收藏本站
查看: 719|回复: 0

[经验分享] php 备份数据库(生成word,excel,json,xml,sql)

[复制链接]

尚未签到

发表于 2015-8-26 13:50:11 | 显示全部楼层 |阅读模式
  单表备份
  代码:



<?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="http://www.w3.org/TR/REC-html40">   
<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="http://www.w3.org/TR/REC-html40">   
<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();
        }
    }
?>
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-104520-1-1.html 上篇帖子: PHP图片验证码的实现 下篇帖子: PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表