ホームページ > バックエンド開発 > PHPチュートリアル > PHP データのバックアップ: 単一テーブルのバックアップ、テーブル全体のバックアップ、データベースのインポート

PHP データのバックアップ: 単一テーブルのバックアップ、テーブル全体のバックアップ、データベースのインポート

WBOY
リリース: 2016-07-25 09:04:15
オリジナル
1106 人が閲覧しました
  1. class Db
  2. {
  3. var $conn;
  4. function Db($host="localhost",$user="root",$pass="root",$db="test")
  5. {
  6. if(!$this->conn=mysql_connect($host) ,$user,$pass))
  7. die("mysql サーバーに接続できません");
  8. mysql_select_db($db,$this->conn);
  9. mysql_query("SET NAMES 'UTF-8'");
  10. }
  11. 関数execute($sql)
  12. {
  13. return mysql_query($sql,$this->conn);
  14. }
  15. 関数 findCount($sql)
  16. {
  17. $result=$this->execute($sql);
  18. return mysql_num_rows($result);
  19. }
  20. 関数 findBySql($sql)
  21. {
  22. $array=array();
  23. $result=mysql_query($sql);
  24. $i=0;
  25. while($row=mysql_fetch_assoc($result))
  26. {
  27. $array[$i]=$row;
  28. $i++;
  29. }
  30. $array を返します。
  31. }
  32. //$con の几种情况
  33. //空:全部记录を返す
  34. //配列:例。 array('id'=>'1') 戻りid=1の记录
  35. //string :eg. 'id=1' 戻りid=1の记录
  36. function toExtJson($table,$start="0",$limit="10",$cons="")
  37. {
  38. $sql=$this->generateSql ($table,$cons);
  39. $totalNum=$this->findCount($sql);
  40. $result=$this->findBySql($sql." LIMIT ".$start." ,".$limit);
  41. $resultNum = count($result);//当前の结果数
  42. $str="";
  43. $str.= "{";
  44. $str.= "'totalCount':'$totalNum',";
  45. $str.="'行':";
  46. $str.="[";
  47. for($i=0;$i $str.="{";
  48. $count=count($result[$i]);
  49. $j=1;
  50. foreach($result[$i] as $key=>$val)
  51. {
  52. if($j<$count)
  53. {
  54. $str.="'".$key."':'".$値"',";
  55. }
  56. elseif($j==$count)
  57. {
  58. $str.="'".$key."':'".$val."'";
  59. }
  60. $j++;
  61. }
  62. $str.="}";
  63. if ($i != $resultNum-1) {
  64. $str.= ",";
  65. }
  66. }
  67. $str.="]";
  68. $str.="}";
  69. $str; を返します。
  70. }
  71. functiongenerateSql($table,$cons)
  72. {
  73. $sql="";//SQL 条件
  74. $sql="select * from ".$table;
  75. if($cons!="")
  76. {
  77. if(is_array($cons))
  78. {
  79. $k=0;
  80. foreach($cons as $key=>$val)
  81. {
  82. if($k==0)
  83. {
  84. $sql.="where '";
  85. $sql.=$key;
  86. $sql.="'='";
  87. $sql.=$val."'";
  88. }else
  89. {
  90. $sql.="and '";
  91. $sql.=$key;
  92. $sql.="'='";
  93. $sql.=$val."'";
  94. }
  95. $k++;
  96. }
  97. }else
  98. {
  99. $sql.=" where ".$cons;
  100. }
  101. }
  102. $sql を返します。
  103. }
  104. 関数 toExtXml($table,$start="0",$limit="10",$cons="")
  105. {
  106. $sql=$this->generateSql($table,$cons);
  107. $totalNum=$this->findCount($sql);
  108. $result=$this->findBySql($sql." LIMIT ".$start." ,".$limit);
  109. $resultNum = count($result);//当前の結果数
  110. header("Content-Type: text/xml");
  111. $xml="n";
  112. $xml.="n";
  113. $xml.="t".$totalNum."n";
  114. $xml.="tn";
  115. for($i=0;$i $xml.="ttn";
  116. foreach($result[$i] as $key=>$val)
  117. $xml.="ttt<".$key.">".$val." $xml.="ttn";
  118. }
  119. $xml.="tn";
  120. $xml.="n";
  121. $xml を返す;
  122. }
  123. //出力word表格
  124. function toWord($table,$mapping,$fileName)
  125. {
  126. header('Content-type: application/doc');
  127. header('Content-Disposition:attachment; filename="'.$fileName.'.doc"');
  128. echo ' xmlns:w="urn:schemas-microsoft-com:office:word"
  129. xmlns="http://www .w3.org/TR/REC-html40">
  130. <頭>
  131. '.$fileName.'
  132. ';
  133. echo'';
  134. if(is_array($mapping))
  135. {
  136. foreach($mapping as $key=>$val)
  137. echo'
  138. ';
  139. }
  140. echo'
  141. ';
  142. $results=$this->findBySql('select * from '.$table);
  143. foreach($results as $result)
  144. {
  145. echo'
  146. ';
  147. foreach($result as $key=>$val)
  148. echo'
  149. ';
  150. echo'
  151. ';
  152. }
  153. echo'
  154. '.$val.'
    '.$val.'
    ';
  155. echo'';
  156. echo'';
  157. }
  158. 関数 toExcel($table,$mapping,$fileName)
  159. {
  160. header("Content-type:application/vnd.ms-excel");
  161. header("Content-Disposition:filename=".$fileName.".xls");
  162. echo' xmlns:x="urn:schemas-microsoft-com:office:excel"
  163. xmlns="http://www .w3.org/TR/REC-html40">
  164. <頭>
  165. ';
  166. echo'';
  167. echo'
  168. ';
  169. if(is_array($mapping))
  170. {
  171. foreach($mapping as $key=>$val)
  172. echo'
  173. ';
  174. }
  175. echo'
  176. ';
  177. $results=$this->findBySql('select * from '.$table);
  178. foreach($results as $result)
  179. {
  180. echo'
  181. ';
  182. foreach($result as $key=>$val)
  183. echo'
  184. ';
  185. echo'
  186. ';
  187. }
  188. echo'
  189. '.$val.'
    '.$val.'
    ';
  190. echo'';
  191. echo'';
  192. }
  193. 関数 Backup($table)
  194. {
  195. if(is_array ($table))
  196. {
  197. $str="";
  198. foreach($table as $tab)
  199. $str.=$this->get_table_content($tab);
  200. $str; を返します。
  201. }else{
  202. return $this->get_table_content($table);
  203. }
  204. }
  205. function Backuptofile($table,$file)
  206. {
  207. header("Content-disposition: filename=$file.sql");// 所蔵される文書名
  208. header("Content-type: application /オクテットストリーム");
  209. header("プラグマ: キャッシュなし");
  210. header("有効期限: 0");
  211. if(is_array ($table))
  212. {
  213. $str="";
  214. foreach($table as $tab)
  215. $str.=$this->get_table_content($tab);
  216. $str; をエコーする
  217. }else{
  218. echo $this->get_table_content($table);
  219. }
  220. }
  221. function Restore($table,$file="",$content="")
  222. {
  223. // ファイルを除外します。コンテンツはすべてです空、または空でもない
  224. if(($file==""&&$content=="")||($file!=""&&$content!=""))
  225. echo "パラメータ エラー"
  226. $this ->truncate($table);
  227. if($file!="")
  228. {
  229. if($this->RestoreFromFile($file))
  230. return true;
  231. else
  232. return false; $content!="")
  233. {
  234. if($this->RestoreFromContent($content))
  235. return true;
  236. else
  237. return false;
  238. }
  239. }
  240. // リカバリ用のテーブルをクリアする
  241. 関数 truncate ($table)
  242. {
  243. if(is_array ($table))
  244. {
  245. $str="";
  246. foreach($table as $tab)
  247. $this->execute("TRUNCATE TABLE $tab "); }else{
  248. $this->execute("TRUNCATE TABLE $table");
  249. }
  250. }
  251. function get_table_content($table)
  252. {
  253. $results=$this->findBySql("select * from $table ");
  254. $temp = "";
  255. $crlf="
    ";
  256. foreach($results as $result)
  257. {
  258. /*(";
  259. foreach($result as $key=> $val)
  260. {
  261. $schema_insert .= " `".$key."`," }
  262. $schema_insert = ereg_replace(",$", "", $schema_insert);
  263. $schema_insert . */
  264. $schema_insert = "INSERT INTO $table VALUES (";
  265. foreach($result as $key=>$val)
  266. {
  267. if($val != "")
  268. $schema_insert .= " '"。 addlashes($val)."',";
  269. else
  270. $schema_insert .= "NULL,"; }
  271. $schema_insert = ereg_replace(",$", "", $schema_insert); ;$crlf";
  272. $temp = $temp.$schema_insert ;
  273. }
  274. return $temp;
  275. }
  276. function RestoreFromFile($file){
  277. if (false !== ($fp = fopen( $file, ' r'))) {
  278. $sql_queries = trim(fread($fp, filesize($file)));
  279. $this->splitMySqlFile($pieces, $sql_queries);
  280. foreach ($pieces as $query) {
  281. if(!$this->execute(trim($query)))
  282. return false;
  283. }
  284. return false;
  285. function RestoreFromContent($content)
  286. {
  287. $content =トリム($content);
  288. $this->splitMySqlFile($pieces, $content);
  289. foreach ($pieces as $query) {
  290. if(!$this->execute(trim($query) )))
  291. false を返す
  292. }
  293. true を返す
  294. }
  295. 関数 splitMySqlFile(&$ret, $sql)
  296. $sql=trim($sql);
  297. $arr=array();
  298. foreach($sql as $sq)
  299. {
  300. if($sq!="");
  301. $ret=$arr; true;
  302. }
  303. }
  304. $db=new db();
  305. // 単語を生成
  306. //$map=array('No','Name','Email','Age')
  307. //echo $db->toWord('test',$map,'File');
  308. // Excel を生成
  309. //$map=array('No','Name','Email','Age ');
  310. //echo $db->toExcel('test',$map,'file');
  311. //Xml を生成する
  312. //echo $db->toExtXml('test',0,20 );
  313. //Json を生成
  314. //echo $db->toExtJson('test',0,20);
  315. //Backup
  316. //echo $db->Backuptofile('test','backup ');
  317. ?>
  318. コードをコピー
  319. 2. テーブル全体をバックアップします
  320. 1
  321. 2 次のページ 最後のページ
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート