電話

    0411-39943997

仟億科技
客服中心
  • 電話
  • 電話咨詢:0411-39943997
  • 手機
  • 手機咨詢:15840979770
    手機咨詢:13889672791
網絡營銷 >更多
您現在的位置:首頁 > 新聞中心 > 常見問題

大連網站制作:php基礎:常用數據庫備份類

作者:billionnet 發布于:2011/12/19 15:35:21 點擊量:

php基礎:常用數據庫備份類

 

php代碼: 

< ?php 
/******************************************************* 
**文 件 名:DBManagement.php 
**描 述:實現數據的導入導出,數據表結構的導入導出 
********************************************************/ 
// 
//包含Mysql數據庫操作文件 
// 
require_once("MysqlDB.php"); 

/******************************************************* 
**類 名:MysqlDB 
********************************************************/ 
class DBManagement implements IDBManagement 

// 
//當前數據庫中所有的數據表的名字 
// 
private $TablesName; 
// 
//默認路徑 
// 
private $DefaultPath; 
// 
//當前要操作的數據庫名 
// 
private $DatabaseName; 
// 
//操作數據庫的對象 
// 
private $db; 

/******************************************************* 
**方 法 名:__construct 
**功能描述:創建一個DBManagement的對象 
**輸入參數:$_DatabaseName-string<要操作的數據庫名,如果為空則從配置文件中讀取> 
** $_DefaultPath-string<存儲數據的默認路徑,如果為空則從配置文件中讀取> 
**輸出參數:無 
**返 回 值:無 
********************************************************/ 
function __construct($_DatabaseName="",$_DefaultPath="")// 

require("config.inc.php"); 
if(!$_DatabaseName) {$this->DatabaseName=$dbName;} 
else {$this->DatabaseName=$_DatabaseName;} 

if(!$_DefaultPath) {$this->DefaultPath=$defaultPath;} 
else {$this->DefaultPath=$_DefaultPath;} 
$path=realpath($this->DefaultPath); 
$this->DefaultPath=str_replace("\\","/",$path); 
//$this->db=new DBFactory(); 
$this->db=new MysqlDB(); 


/******************************************************* 
**方 法 名:GetTablesName 
**功能描述:獲取$this->Database的所有數據表的名字 
**輸入參數:無 
**輸出參數:無 
**返 回 值:-array <$this->TablesName:$this->Database的所有數據表的名字> 
********************************************************/ 
protected function GetTablesName() 

$result=$this->db->Query("show table status"); 
while($Row=$this->db->NextRecord($result)) 

$this->TablesName[]=$Row["Name"]; 

return $this->TablesName; 


/******************************************************* 
**方 法 名:GetDataFileName 
**功能描述:獲取與$this->Database的所有數據表對應的數據文件的物理文件名 
**輸入參數:無 
**輸出參數:無 
**返 回 值:-array <$DataFilesName:$與$this->Database的所有數據表對應的數據文件的物理文件名> 
********************************************************/ 
protected function GetDataFileName() 

$this->GetTablesName(); 
$count=count($this->GetTablesName()); 
for ($i=0;$i<$count;$i++) 

$DataFilesName[]=$this->DefaultPath."/".$this->TablesName[$i].".txt"; 
//echo $DataFilesName[$i]; 

return $DataFilesName; 


/******************************************************* 
**方 法 名:SaveTableStructure 
**功能描述:保存數據表的結構到install.sql文件中,目標路徑為$DefaultPath 
**輸入參數:無 
**輸出參數:無 
**返 回 值:- bool<返回為true表示保存成功; 
** 為false表示保存失敗> 
**作 者:林超旗 
**日 期:2007-04-09 
**修 改 人: 
**日 期: 
********************************************************/ 
protected function SaveTableStructure($text) 

$fileName=$this->DefaultPath."/Install.sql"; 
//if(file_exists($fileName)) 
//{ 
// unlink($fileName); 
//} 
//echo $text; 
$fp=fopen($fileName,"w+"); 
fwrite($fp,$text); 


/******************************************************* 
**方 法 名:RestoreTableStructure 
**功能描述:備份$this->Database中所有數據表的結構 
**輸入參數:無 
**輸出參數:無 
**返 回 值:- bool<返回為true表示所有數據表的結構備份成功; 
** 為false表示全部或部分數據表的結構備份失敗> 
**作 者:林超旗 
**日 期:2007-04-09 
**修 改 人: 
**日 期: 
********************************************************/ 
protected function BackupTableStructure() 

$i=0; 
$sqlText=""; 

$this->GetTablesName(); 
$count=count($this->TablesName); 
// 
//取出所有數據表的結構 
// 
while($i<$count) 

$tableName=$this->TablesName[$i]; 
$result=$this->db->Query("show create table $tableName"); 
$this->db->NextRecord($result); 
// 
//取出成生表的SQL語句 
// 
$sqlText.="DROP TABLE IF EXISTS `".$tableName."`; ";//` 
$sqlText.=$this->db->GetField(1)."; "; 
$i++; 

$sqlText=str_replace("\r","",$sqlText); 
$sqlText=str_replace("\n","",$sqlText); 
//$sqlText=str_replace("’","`",$sqlText); 
$this->SaveTableStructure($sqlText); 
}

/******************************************************* 
**方 法 名:RestoreTableStructure 
**功能描述:還原$this->Database中所有數據表的結構 
**輸入參數:無 
**輸出參數:無 
**返 回 值:- bool<返回為true表示所有數據表的結構還原成功; 
** 為false表示全部或部分數據表的結構還原失敗> 
**作 者:林超旗 
**日 期:2007-04-09 
**修 改 人: 
**日 期: 
********************************************************/ 
protected function RestoreTableStructure() 

$fileName=$this->DefaultPath."/Install.sql"; 
if(!file_exists($fileName)){echo "找不到表結構文件,請確認你以前做過備份!";exit;} 
$fp=fopen($fileName,"r"); 

$sqlText=fread($fp,filesize($fileName)); 
//$sqlText=str_replace("\r","",$sqlText); 
//$sqlText=str_replace("\n","",$sqlText); 
$sqlArray=explode("; ",$sqlText); 
try 

$count=count($sqlArray); 
// 
//數組的最后一個為";",是一個無用的語句, 
// 
for($i=1;$i<$count;$i++) 

$sql=$sqlArray[$i-1].";"; 
$result=$this->db->ExecuteSQL($sql); 
if(!mysql_errno()) 

if($i%2==0){echo "數據表".($i/2)."的結構恢復成功!\n";} 

else 

if($i%2==0) 

echo "數據表".($i/2)."的結構恢復失敗!\n"; 
exit(); 




catch(Exception $e) 

$this->db->ShowError($e->getMessage()); 
$this->db->Close(); 
return false; 



/******************************************************* 
**方 法 名:ImportData 
**功能描述:導入$this->Database中所有數據表的數據從與其同名的.txt文件中,源路徑為$DefaultPath 
**輸入參數:無 
**輸出參數:無 
**返 回 值:- bool<返回為true表示所有數據表的數據導入成功; 
** 為false表示全部或部分數據表的數據導入失敗> 
**作 者:林超旗 
**日 期:2007-04-09 
**修 改 人: 
**日 期: 
********************************************************/ 
function ImportData() 

$DataFilesName=$this->GetDataFileName(); 
$count=count($this->TablesName); 
//$this->db->ExecuteSQL("set character set gbk"); 
for ($i=0;$i<$count;$i++) 

//$DataFilesName[$i]=str_replace("\\","/",$DataFilesName[$i]) 
//echo $DataFilesName[$i]; 
$sqlLoadData="load data infile ’".$DataFilesName[$i]."’ into table ".$this->TablesName[$i]; 
$sqlCleanData="delete from ".$this->TablesName[$i]; 
//echo $sql."\n"; 
try 

//$this->db->ExecuteSQL("set character set utf8"); 
//$this->db->ExecuteSQL("SET NAMES ’utf8’"); 
$this->db->ExecuteSQL($sqlCleanData); 
$this->db->ExecuteSQL($sqlLoadData); 
return true; 
//echo "數據導入成功!"; 

catch (Exception $e) 

$this->db->ShowError($e->getMessage()); 
return false; 
exit(); 




/******************************************************* 
**方 法 名:ExportData 
**功能描述:導出$this->Database中所有數據表的數據到與其同名的.txt文件中,目標路徑為$DefaultPath 
**輸入參數:無 
**輸出參數:無 
**返 回 值:- bool<返回為true表示所有數據表的數據導出成功; 
** 為false表示全部或部分數據表的數據導出失敗> 
********************************************************/ 
function ExportData() 

$DataFilesName=$this->GetDataFileName(); 
$count=count($this->TablesName); 
try 

for ($i=0;$i<$count;$i++) 

$sql="select * from ".$this->TablesName[$i]." into outfile ’".$DataFilesName[$i]."’"; 
if(file_exists($DataFilesName[$i])) 

unlink($DataFilesName[$i]); 

//$this->db->ExecuteSQL("SET NAMES ’utf8’"); 
$this->db->ExecuteSQL($sql); 

return true; 
//echo "數據導出成功!"; 

catch (Exception $e) 

$this->db->ShowError($e->getMessage()); 
return false; 
exit(); 



/******************************************************* 
**方 法 名:BackupDatabase 
**功能描述:備份$this->Database中所有數據表的結構和數據 
**輸入參數:無 
**輸出參數:無 
**返 回 值:- bool<返回為true表示所有數據表的數據庫備份成功; 
** 為false表示全部或部分數據表的數據庫備份失敗> 
********************************************************/ 
function BackupDatabase() 

try 

$this->BackupTableStructure(); 
$this->ExportData(); 
return true; 

catch (Exception $e) 

$this->db->ShowError($e->getMessage()); 
return false; 
exit(); 



/******************************************************* 
**方 法 名:RestoreDatabase 
**功能描述:還原$this->Database中所有數據表的結構和數據 
**輸入參數:無 
**輸出參數:無 
**返 回 值:- bool<返回為true表示所有數據表的數據庫還原成功; 
** 為false表示全部或部分數據表的數據庫還原失敗> 
********************************************************/ 
function RestoreDatabase() 

try 

$this->RestoreTableStructure(); 
$this->ImportData(); 
return true; 

catch (Exception $e) 

$this->db->ShowError($e->getMessage()); 
return false; 
exit(); 



?>

 

大連仟億科技、大連網站建設、大連網站制作大連網頁制作、大連網頁設計、大連網站設計、大連網站推廣、大連軟件開發、大連網絡公司



分享到:


Copyright@ 2011-2016 版權所有:大連千億科技有限公司 遼ICP備11013762-3號   google網站地圖   百度網站地圖   網站地圖

公司地址:大連市沙河口區中山路692號辰熙星海國際2317 客服電話:0411-39943997 QQ:2088827823 37482752

法律聲明:未經許可,任何模仿本站模板、轉載本站內容等行為者,本站保留追究其法律責任的權利! 隱私權政策聲明

www精品一区二区三区四区