- class dbBackup {
- public $host='localhost'; // データベースアドレス
- public $user='root'; // ログイン名
- public $pwd=''; //データベース名
- public $charset='utf8'; //データベース接続エンコーディング: mysql_set_charset
- }
-
-
コードをコピー
2. データベース接続関数を追加します。
/**- * データベースに接続します...
- */
- function db() {
- $con = mysql_connect($this->host,$this->user,$this->pwd);
- if (!$con){
- die('接続できませんでした');
- }
-
- $db_selected = mysql_select_db($this->database, $con);
- if (!$db_selected) {
- die('Can' select db');
- }
-
- mysql_set_charset($this->charset); // エンコーディングを設定します
-
- return $con;
- }
-
-
コードをコピーします
3. データベース テーブル コレクションをクエリします。
/**- * テーブルコレクション ...
- */
- function tblist() {
- $list=array();
-
- $rs=mysql_query("$this->database からテーブルを表示");
- while ($temp=mysql_fetch_row($rs)) {
- $list[]=$temp[0];
- }
-
- return $list;
- }
-
-
コードをコピー
4. クエリテーブル構造
/** - *テーブル構造 SQL...
- */
- function sqlcreate() {
- $sql='';
-
- $tb=$this->tblist(); tb as $v) {
- $rs=mysql_query("SHOW CREATE TABLE $v");
- $temp=mysql_fetch_row($rs);
- $sql.="-- テーブル構造: {$temp[0]} - -rn";
- $sql.="{$temp[1]}";
- $sql.=";-- --rnrn";
- }
$sql;
- }
-
-
-
-
- コードをコピー
-
注: $sql.=";-- --rnrn"; 各 SQL ステートメントはセミコロン (;) で区切る必要があります。インポートは認識できます。 -- -- は、SQL ステートメントを分割するためのプログラムの識別子です。カスタマイズできますが、コメント ステートメントである必要があります。そうしないと、SQL ステートメントに影響します。 rn には実際的な意味はなく、テキストの美しさのために使用されます。
5. 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.="`$v` 値に挿入rn";
- 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"、詳細については、ステップ 4 の注を参照してください
6. バックアップ操作
-
- /**
- * バックアップ...
- * @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('接続できませんでした');
- }
-
- $db_selected = mysql_select_db($this->database, $con);
- if (!$db_selected) {
- die ('select db は使用できません');
- }
-
- mysql_set_charset($this->charset); // エンコーディングを設定します
-
- return $con;
- }
-
- /**
- * テーブルコレクション ...
- */
- 関数 tblist () {
- $ list=array();
-
- $rs=mysql_query("$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 へのデータ挿入...
- */
- 関数 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データバックアップ: 単一テーブルのバックアップ、テーブル全体のバックアップ、データベースのインポート
|