ホームページ >バックエンド開発 >PHPチュートリアル >PHP バックアップ データベース コード (word、excel、json、xml、sql の生成)_PHP チュートリアル

PHP バックアップ データベース コード (word、excel、json、xml、sql の生成)_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:03:46831ブラウズ

単一テーブルのバックアップ
コード:

コードをコピーします コードは次のとおりです:

class Db
{
var $conn;   

function Db($host="localhost",$user="root",$pass="root",$db="test")
{
if(!$this->conn=mysql_connect($host) ,$user,$pass))
die("mysql サーバーに接続できません");   
mysql_select_db($db,$this->conn);   
mysql_query("SET NAMES 'UTF-8'");   
}

関数execute($sql)
{
return mysql_query($sql,$this->conn);   
}

function findCount($sql)
{
$result=$this->execute($sql);   
return mysql_num_rows($result);   
}

関数 findBySql($sql)
{
$array=array();   
$result=mysql_query($sql);   
$i=0;   
while($row=mysql_fetch_assoc($result))
{
$array[$i]=$row;    
$i++;   
}
$array を返す。   
}

//$con的几种情况
//空:返全部记录
//配列:例。 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.="'行':";   
$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."':'".$値"',";   
}
elseif($j==$count)
{
$str.="'".$key."':'".$val."'";   
}
$j++;   
}

$str.="}";
if ($i != $resultNum-1) {
$str.= ",";
}
}
$str.="]";
$str.="}";
$str を返す;
}

functiongenerateSql($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. ="どこ '";
$sql.=$key;
$sql.="'='";
$sql.=$val."'";
}else
{
$sql.="と ' ";
$sql.=$key;
$sql.="'='";
$sql.=$val."'";
}
$k++;
}
}else
{
$sql. =" ここで、.$cons;
}
}
return $sql;
}

関数 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="n";   
$xml.="n";   
$xml.="t".$totalNum."n";   
$xml.="tn";   
for($i=0;$i<$resultNum;$i++){
$xml.="ttn";   
foreach($result[$i] as $key=>$val)
$xml.="ttt<".$key.">".$val." $xml.="tt
n";   
}
$xml.="t
n";   
$xml.="
n";   
$xml を返します。   
}   

//出単語表格
function toWord($table,$mapping,$fileName)
{
header('Content-type: application/doc');    
header('Content-Disposition:attachment; filename="'.$fileName.'.doc"');    
echo ' 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]">   
<頭>   
   
'.$fileName.'   
   
';    
echo'';   
if(is_array($mapping))
{
foreach($mapping as $key=>$val)
echo'';   
}
echo'';   
$results=$this->findBySql('select * from '.$table);   
foreach($results as $result)
{
echo'';   
foreach($result as $key=>$val)
echo'';   
echo'';   
}
echo'
'.$val.'
'.$val.'
';   
echo'';   
echo'';   
}   

function toExcel($table,$mapping,$fileName)
{
header("Content-type:application/vnd.ms-excel");   
header("Content-Disposition:filename=".$fileName.".xls");   
echo' 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]">   
<頭>   
   
   
   
   
';    
echo'';   
echo'';   
if(is_array($mapping))
{
foreach($mapping as $key=>$val)
echo'';   
}   
echo'';   
$results=$this->findBySql('select * from '.$table);   
foreach($results as $result)
{
echo'';   
foreach($result as $key=>$val)
echo'';   
echo'';   
}
echo'
'.$val.'
'.$val.'
';   
echo'';   
echo'';   
}

関数 Backup($table)
{
if(is_array ($table))
{
$str="";   
foreach($table as $tab)
$str.=$this->get_table_content($tab);   
$str; を返します。   
}else{
return $this->get_table_content($table);   
}
}

function Backuptofile($table,$file)
{
header("Content-disposition: filename=$file.sql");// 保存された文書名
header("Content -type: アプリケーション/オクテットストリーム");   
header("Pragma: no-cache");   
header("有効期限: 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="")
{
//ファイルを除外、コンテンツ都は空または者都不不空的情况
if(($file= =""&&$content=="")||($file!=""&&$content!=""))
echo"パラメータ错误";   
$this->truncate($table);   
if($file!="")
{
if($this->RestoreFromFile($file))
trueを返します。   
else
false を返します。   
}
if($content!="")
{
if($this->RestoreFromContent($content))
trueを返します。   
else
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="
";   
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;    : ));   
$this->splitMySqlFile($pieces, $sql_queries);   
foreach ($pieces as $query) {
if(!$this->execute(trim($query)))
return false;   
}
trueを返します。   
}
falseを返します。   
}

関数 RestoreFromContent($content)
{
$content = trim($content);   
$this->splitMySqlFile($pieces, $content);   
foreach ($pieces as $query) {
if(!$this->execute(trim($query)))
return false;   
}
trueを返します。   
}   

function splitMySqlFile(&$ret, $sql)
{
$sql=rim($sql);   
$sql=split(';',$sql);   
$arr=array();   
foreach($sql as $sq)
{
if($sq!="");   
$arr[]=$sq;   
}
$ret=$arr;   
true を返します。   
}
}

$db=new db();   

// 単語の生成
//$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, "nnn");
}
}
fclose($filehandle);
$update_data = array('filename' => $filename, 'postdate' => mktime());
$db->insert('backup_db', $update_data);
// データダンプ関数
function sqldumptable($table) , $fp = 0)
{
$tabledump = "存在する場合はテーブルを削除 " . $テーブル 。 ";n";
$result = mysql_fetch_array(mysql_query("SHOW CREATE TABLE " . $table));
//echo "SHOW CREATE TABLE $table";
$tabledump .= $result[1] . ";rn";
if ($fp) {
fwrite($fp, $tabledump);
} else {
echo $tabledump;
}
// データを取得
$rows = mysql_query("SELECT * FROM " . $table);
// $numfields=$DB->num_fields($rows);
$numfields = mysql_num_fields($rows);
while ($row = mysql_fetch_array($rows)) {
$tabledump = "INSERTの中へ " 。 $テーブル 。 " VALUES(";
$fieldcounter = -1;
$firstfield = 1;
// 各フィールドのデータを取得します
while (++$fieldcounter < $numfields) {
if (!$firstfield) $tabledump 。 = ", ";
} else {
$firstfield = 0;
}
if (!isset($row[$fieldcounter])) {
$tabledump . = "NULL";
} else {
$tabledump .= "'" . mysql_escape_string($row[$fieldcounter]) . "'";
}
$tabledump .= ");n";
fwrite($fp) 、$tabledump);
} else {
echo $tabledump;
}
}
mysql_free_result($rows);
}



导入力库


复制代
代码如下:

/************
*
PHPインポート.sqlファイル
実行バージョン:php5,php4 使用時に選択してください
Author:panxp
Email: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."个查询
";
} else {
echo "导入失败:".mysql_error();
}
}
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327829.html技術記事单表备份代: 复制代码如下: ?php class Db { var $conn; function Db($host="localhost",$user="root",$pass="root",$db="test") { if(!$this-conn=mysql_connect($hos...
)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。