ホームページ  >  記事  >  バックエンド開発  >  PHP は MYSQL のバックアップと復元を実装します

PHP は MYSQL のバックアップと復元を実装します

WBOY
WBOYオリジナル
2016-07-25 08:59:211081ブラウズ
  1. class dbBackup {
  2. public $host='localhost'; // データベースアドレス
  3. public $user='root'; // ログイン名
  4. public $pwd=''; //データベース名
  5. public $charset='utf8'; //データベース接続エンコーディング: mysql_set_charset
  6. }
コードをコピー
2. データベース接続関数を追加します。

    /**
  1. * データベースに接続します...
  2. */
  3. function db() {
  4. $con = mysql_connect($this->host,$this->user,$this->pwd);
  5. if (!$con){
  6. die('接続できませんでした');
  7. }
  8. $db_selected = mysql_select_db($this->database, $con);
  9. if (!$db_selected) {
  10. die('Can' select db');
  11. }
  12. mysql_set_charset($this->charset); // エンコーディングを設定します
  13. return $con;
  14. }
コードをコピーします
3. データベース テーブル コレクションをクエリします。

    /**
  1. * テーブルコレクション ...
  2. */
  3. function tblist() {
  4. $list=array();
  5. $rs=mysql_query("$this->database からテーブルを表示");
  6. while ($temp=mysql_fetch_row($rs)) {
  7. $list[]=$temp[0];
  8. }
  9. return $list;
  10. }
コードをコピー
4. クエリテーブル構造

    /**

  1. *テーブル構造 SQL...
  2. */
  3. function sqlcreate() {
  4. $sql='';
  5. $tb=$this->tblist(); tb as $v) {
  6. $rs=mysql_query("SHOW CREATE TABLE $v");
  7. $temp=mysql_fetch_row($rs);
  8. $sql.="-- テーブル構造: {$temp[0]} - -rn";
  9. $sql.="{$temp[1]}";
  10. $sql.=";-- --rnrn";
  11. }

  12. $sql;

  13. }
  14. コードをコピー
注: $sql.=";-- --rnrn"; 各 SQL ステートメントはセミコロン (;) で区切る必要があります。インポートは認識できます。 -- -- は、SQL ステートメントを分割するためのプログラムの識別子です。カスタマイズできますが、コメント ステートメントである必要があります。そうしないと、SQL ステートメントに影響します。 rn には実際的な意味はなく、テキストの美しさのために使用されます。

5. INSERT INTO ステートメント

/**
* SQL へのデータ挿入...
    */
  1. function sqlinsert() {
  2. $sql='';
  3. $tb=$this->tblist();
  4. foreach ($tb as $v) {
  5. $rs=mysql_query("SELECT * FROM $v");
  6. if (!mysql_num_rows($rs)) {//データは返されません
  7. continue;
  8. }
  9. $sql.="-- テーブル データ: $ v --rn";
  10. $sql.="`$v` 値に挿入rn";
  11. while ($temp=mysql_fetch_row($rs)) {
  12. $sql.='(';
  13. foreach ($temp as $ v2) ) {
  14. if ($v2===null) {
  15. $sql.="NULL,";
  16. }
  17. else {
  18. $v2=mysql_real_escape_string($v2);
  19. $sql.="'$v2', " ;
  20. }
  21. }
  22. $sql=mb_substr($sql, 0, -1);
  23. $sql.="),rn";
  24. }
  25. $sql=mb_substr($sql, 0, -3);
  26. $ sql.=";-- --rnrn";
  27. }
  28. return $sql;
  29. }
  30. コードをコピーします

メモ: 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. バックアップ操作

  1. /**
  2. * バックアップ...
  3. * @param $filename ファイルパス
  4. */
  5. function beifen($filename) {
  6. $this->db() //データベースに接続します
  7. $sql=$this->sqlcreate( );
  8. $sql2=$this->sqlinsert();
  9. $data=$sql.$sql2;
  10. return file_put_contents($filename, $data);
  11. }
コードをコピーします

手術

  1. /**
  2. * 復元...
  3. * @param $filename ファイルパス
  4. */
  5. function huanyuan($filename) {
  6. $this->db(); //データベースに接続します
  7. //データテーブルを削除します
  8. $list= $this- >tblist();
  9. $tb='';
  10. foreach ($list as $v) {
  11. $tb.="`$v`,";
  12. }
  13. $tb=mb_substr($tb, 0, - 1);
  14. if ($tb) {
  15. $rs=mysql_query("DROP TABLE $tb");
  16. if ($rs===false) {
  17. return false;
  18. }
  19. }
  20. // SQLを実行
  21. $str=file_get_contents($filename);
  22. $arr=explode('-- --', $str);
  23. array_pop($arr);
  24. foreach ($arr as $v) {
  25. $ rs=mysql_query($v);
  26. if ($rs===false) {
  27. return false;
  28. }
  29. }
  30. return true;
  31. }
コードをコピー

して呼び出しを確認します例。 1. バックアップの例:

  1. $x=new dbBackup();
  2. $x->database='test';
  3. $rs=$x->beifen('db.sql');
  4. var_dump($rs) ;
コードをコピー

2、復元例:

  1. $x=new dbBackup();
  2. $x->database='test';
  3. $rs=$x->huanyuan('db.sql');
  4. var_dump($rs) ;
コードをコピー

完全なコード:

  1. /**

  2. * PHP は mysql のバックアップと復元を実装します
  3. * 組織化されたプログラマーのホーム bbs.it-home.org
  4. */
  5. class dbBackup {
  6. public $host='localhost' //データベースアドレス
  7. public $user='root'; //ログイン名
  8. public $pwd=''; //パスワード
  9. public $database; //データベース名
  10. public $charset='utf8' //データベース接続エンコーディング: mysql_set_charset
  11. /**
  12. * バックアップ...
  13. * @param $filename ファイルパス
  14. */
  15. function beifen($filename) {
  16. $this->db(); //データベースに接続します
  17. $sql=$this->sqlcreate();
  18. $sql2=$this->sqlinsert() ;
  19. $data=$sql.$sql2;
  20. return file_put_contents($filename, $data);
  21. }
  22. /**
  23. * 復元...
  24. * @param $filename ファイルパス
  25. */
  26. function huanyuan($filename) {
  27. $this->db () ; //データベースに接続します
  28. //データテーブルを削除します
  29. $list=$this->tblist();
  30. $tb='';
  31. foreach ($list as $v) {
  32. $tb .="`$ v`,";
  33. }
  34. $tb=mb_substr($tb, 0, -1);
  35. if ($tb) {
  36. $rs=mysql_query("DROP TABLE $tb");
  37. if ($rs== =false) {
  38. return false;
  39. }
  40. }
  41. //SQLを実行
  42. $str=file_get_contents($filename);
  43. $arr=explode('-- --', $str);
  44. array_pop($arr);
  45. foreach ($arr as $v) {
  46. $rs=mysql_query($v);
  47. if ($rs===false) {
  48. return false;
  49. }
  50. }
  51. return true ;
  52. }
  53. /**
  54. * データベースに接続します...
  55. */
  56. function db() {
  57. $con = mysql_connect($this->host,$this->user,$this->pwd );
  58. if ( !$con){
  59. die('接続できませんでした');
  60. }
  61. $db_selected = mysql_select_db($this->database, $con);
  62. if (!$db_selected) {
  63. die ('select db は使用できません');
  64. }
  65. mysql_set_charset($this->charset); // エンコーディングを設定します
  66. return $con;
  67. }
  68. /**
  69. * テーブルコレクション ...
  70. */
  71. 関数 tblist () {
  72. $ list=array();
  73. $rs=mysql_query("$this->database");
  74. while ($temp=mysql_fetch_row($rs)) {
  75. $list[]= $temp[0] ;
  76. }
  77. return $list;
  78. }
  79. /**
  80. *テーブル構造 SQL...
  81. */
  82. function sqlcreate() {
  83. $sql='';
  84. $tb=$this->tblist ();
  85. foreach ($tb as $v) {
  86. $rs=mysql_query("SHOW CREATE TABLE $v");
  87. $temp=mysql_fetch_row($rs);
  88. $sql.="-- テーブル構造: { $temp[0 ]} --rn";
  89. $sql.="{$temp[1]}";
  90. $sql.=";-- --rnrn";
  91. }

    return $sql;

  92. }
  93. /**
  94. * SQL へのデータ挿入...
  95. */
  96. 関数 sqlinsert() {
  97. $sql='';
  98. $tb=$this->tblist(); foreach ($tb as $v) {
  99. $rs=mysql_query("SELECT * FROM $v");
  100. if (!mysql_num_rows($rs)) {//データは返されません
  101. continue;
  102. }
  103. $sql.= "-- テーブル データ: $v --rn";
  104. $sql.="INSERT INTO `$v` VALUESrn";
  105. while ($temp=mysql_fetch_row($rs)) {
  106. $sql.='(';
  107. foreach ( $temp as $v2) {
  108. if ($v2===null) {
  109. $sql.="NULL,";
  110. }
  111. else {
  112. $v2=mysql_real_escape_string($v2);
  113. $sql. ="' $v2',";
  114. }
  115. }
  116. $sql=mb_substr($sql, 0, -1);
  117. $sql.="),rn";
  118. }
  119. $sql=mb_substr($sql, 0, - 3);
  120. $sql.=";-- --rnrn"; }
  121. return $sql;
  122. }
  123. }

  124. //バックアップ

  125. //$ x=new dbBackup();
  126. //$x->database='test';
  127. //$rs=$x->beifen('db.sql');
  128. //var_dump($ rs);

  129. //復元

  130. //$x=new dbBackup();
  131. //$x->database='test';
  132. //$rs=$x- >huanyuan ('db.sql');
  133. //var_dump($rs);
  134. ?>

  135. コードをコピー
興味がありそうな記事: php データベース バックアップ クラス 優れた php データベース バックアップ クラスを共有します php 完全なバックアップ データベースとデータベース内の指定されたテーブルのバックアップ クラス php mysqlデータベースバックアップクラスと呼び出しメソッド php は mysql のバックアップと復元のサンプル コードを実装します php mysqlバックアップコード(xmlアプリケーション) phpデータバックアップ: 単一テーブルのバックアップ、テーブル全体のバックアップ、データベースのインポート


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。