-
- class dbBackup {
- public $host='localhost'; //資料庫位址
- public $user='root'; //登入名稱
- public $pwd=''; //密碼
- public $database; //資料庫名稱
- public $charset='utf8'; //資料庫連線編碼:mysql_set_charset
- }
複製程式碼
二、新增資料庫連線function。
-
- /**
- * 連接資料庫 ...
- */
- function db() {
- $con = mysql_connect($this->host,$this ->user,$this->pwd);
- if (!$con){
- die('Could not connect');
- }
-
- $db_selected = mysql_select_db($this ->database, $con);
- if (!$db_selected) {
- die('Can't use select db');
- }
-
- mysql_set_charset($this->charset ); //設定編碼
-
- return $con;
- }
複製程式碼
三、查詢資料庫表格集合
-
- /**
- * 表集合 ...
- */
- function tblist() {
- $list=array();
-
- $rs=mysql_query("SHOW TABLES FROM $this->database");
- while ($temp=mysql_fetch_row($rs)) {
- $list[]=$temp[0];
- }
-
- return $list;
- }
複製程式碼
四、查詢表結構
-
-
/**
- * 表結構SQL ...
- */
- function sqlcreate() {
- $sql=''; function sqlcreate() {
- $sql='';
-
- $tb=$this->tblist();
- foreach ($tb as $v) {
- $rs=mysql_query("SHOW CREATE TABLE $v");
- $tempsql_query("SHOW CREATE TABLE $v");
- $temp =mysql_fetch_row($rs);
- $sql.="-- 表的結構:{$temp[0]} --rn";
- $sql.="{$temp[1]}";
- $sql.=";-- --rnrn";
- }
return $sql;
- }
複製程式碼註:$sql.=";-- --rnrn"; 每句SQL後面必須加上分號(; )分割,MYSQL導入才能辨識。 -- -- 是程式對SQL語句分割的標識,可以自訂但必須是註解語句,否則影響SQL語句。 rn無實際意義用於文本美觀。
五、INSERT INTO語句
-
-
-
- /**
- * 資料插入SQL ...
- */
- function sqlinsert() {
- $sql='';
-
- $ tb=$this->tblist();
- foreach ($tb as $v) {
- $rs=mysql_query("SELECT * FROM $v");
- if (!mysql_num_rows($rs) ) {//無資料回傳
- continue;
- }
- $sql.="-- 表的資料:$v --rn";
- $sql.="INSERT INTO `$v ` VALUESrn";
- while ($temp=mysql_fetch_row($rs)) {
- $sql.='(';
- foreach ($temp as $v2) {
- if ($v2= ==null) {
- $sql.="NULL,";
- }
- else {
- $v2=mysql_real_escape_string($v2);
- $sql.="'$v2' ,";
- }
- }
- $sql=mb_substr($sql, 0, -1);
- $sql.="),rn";
- }
- $sql =mb_substr($sql, 0, -3);
- $sql.=";-- --rnrn";
- }
-
- return $sql;
}
複製程式碼注意事項:
1.無資料回傳時必須跳出本次循環,避免產生多餘程式碼
2.當欄位值為(NULL)時,插入字元為(NULL)而非('NULL'),沒有單引號。
3.$v2=mysql_real_escape_string($v2),這是必要的轉義
4.mb_substr($sql, 0, -1)、mb_substr($sql, 0, -3),必須移除最後一個逗號(,) 否則SQL語句出錯
5.$sql.=";-- --rnrn",詳見第四步註
六、備份操作
-
- /**
- * 備份 ...
- * @param $filename 檔案路徑
- */
- function beifen($filename) {
- $this->db(); //資料庫
-
- $sql=$this->sqlcreate();
- $sql2=$this->sqlinsert();
- $data=$sql.$sql2;
-
- return file_put_contents($filename, $data);
- }
複製程式碼
七、還原運算
-
- /**
- * 還原 ...
- * @param $filename 檔案路徑
- */
- function huanyuan($filename) {
- $this->db(); //資料庫
-
- //刪除資料表
- $list=$this->tblist();
- $tb='';
- foreach ($list as $v) {
- $tb.="`$v`,";
- }
- $tb=mb_substr($tb, 0, -1);
- if ($tb) {
- $rs=mysql_query( "DROP TABLE $tb");
- if ($rs===false) {
- return false;
- }
- }
-
- //執行SQL
- $str =file_get_contents($filename);
- $arr=explode('-- --', $str);
- array_pop($arr);
-
- foreach ($arr as $ v) {
- $rs=mysql_query($v);
- if ($rs===false) {
- return false;
- }
- }
-
- return true ;
- }
複製程式碼
來看下呼叫範例。
1,備份範例:
-
- $x=new dbBackup();
- $x->database='test';
- $rs=$x->beifen ('db.sql');
- var_dump($rs);
複製程式碼
2,還原範例:
-
- $x=new dbBackup();
- $x->database='test';
- $rs=$x->huanyuan ('db.sql');
- var_dump($rs);
複製程式碼
完整程式碼:
-
-
/**
- * php實作mysql備份與還原
- * 整理 程式設計師之家 bbs.it-home.org
- */
- class dbBackup {
- public $host ='localhost'; //資料庫位址
- public $user='root'; //登入名稱
- public $pwd=''; //密碼
- public $database; //資料庫名稱
- public $charset='utf8'; //資料庫連線編碼:mysql_set_charset
-
- /**
- * 備份 ...
- * @param $filename 檔案路徑
- */
- function beifen($filename) {
- $this->db() ; //連接資料庫
-
- $sql=$this->sqlcreate();
- $sql2=$this->sqlinsert();
- $data=$sql.$sql2;
-
- return file_put_contents($filename, $data);
- }
-
- /**
- * 還原 ...
- * @param $filename 檔案路徑
- */
- function huanyuan($filename) {
- $this->db (); //連接資料庫
-
- //刪除資料表
- $list=$this->tblist();
- $tb='';
- foreach ($list as $ v) {
- $tb.="`$v`,";
- }
- $tb=mb_substr($tb, 0, -1);
- if ($tb) {
- $rs=mysql_query("DROP TABLE $tb");
- if ($rs===false) {
- return false;
- }
- }
-
- //執行SQL
- $str=file_get_contents($filename);
- $arr=explode('-- --', $str);
- array_pop($arr);
-
- foreach ($arr as $v) {
- $rs=mysql_query($v);
- if ($rs===false) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * 連接資料庫 ...
- */
- function db() {
- $con = mysql_connect($this->host,$this- >user,$this->pwd);
- if (!$con){
- die('Could not connect');
- }
-
- $db_selected = mysql_select_db($this- >database, $con);
- if (!$db_selected) {
- die('Can't use select db');
- }
-
- mysql_set_charset($this->charset) ; //設定編碼
-
- return $con;
- }
-
- /**
- * 表集合 ...
- */
- function tblist() {
- $list=array() ;
-
- $rs=mysql_query("SHOW TABLES FROM $this->database");
- while ($temp=mysql_fetch_row($rs)) {
- $list[]=$temp[ 0];
- }
-
- return $list;
- }
-
- /**
- * 表結構SQL ...
- */
- function sqlcreate() {
- $sql=' ';
-
- $tb=$this->tblist();
- foreach ($tb as $v) {
- $rs=mysql_query("SHOW CREATE TABLE $v");
- $temp=mysql_fetch_row($rs);
- $sql.="-- 表的結構:{$temp[0]} --rn";
- $sql.="{$temp[1] }";
- $sql.=";-- --rnrn";
- }
return $sql;
- }
-
- /**
- * 資料插入SQL ...
- */
- function sqlinsert() {
- $sql='';
-
- $tb=$this->tblist();
- foreach ($tb as $v) {
- $rs=mysql_query("SELECT * FROM $v");
- if (!mysql_num_rows($rs)) {//無資料回傳
- continue;
- }
- $sql.="-- 表的資料:$v --rn";
- $sql.="INSERT INTO `$v` VALUESrn";
- while ($temp=mysql_fetch_row($rs)) {
- $sql.='(';
- foreach ($temp as $v2) {
- if ($v2===null) {
- $sql.="NULL,";
- }
- else {
- $v2=mysql_real_escape_string($v2);
- $sql.="'$v2',";
- }
- }
- $sql=mb_substr ($sql, 0, -1);
- $sql.="),rn";
- }
- $sql=mb_substr($sql, 0, -3);
- $sql. =";-- --rnrn";
- }
-
- return $sql;
- }
- }
//備份
- //$x=new dbBackup();
- //$x->database='test';
- //$rs=$x->beifen('db.sql');
- //var_dump($rs);
//還原
- //$x=new dbBackup();
- //$x->database='test';
- //$rs=$x->huanyuan('db.sql');
- //var_dump($rs);
- ?>
複製程式碼
您可能感興趣的文章:
php資料庫備份類別 分享一個不錯的php資料庫備份類別
php完整備份資料庫與備份資料庫中指定表格的類別
php mysql資料庫備份類別及呼叫方法
php實作mysql的備份與還原實例程式碼
php mysql備份的程式碼(xml應用)
php資料備份:單表備份 整表備份 匯入資料庫
|