源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

使用php自动备份数据库表的实现方法

  • 时间:2022-06-02 16:33 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:使用php自动备份数据库表的实现方法
[b]1、前言[/b] mysql数据库的备份方式有很多; 例如: [b]1、使用mysqldump函数[/b] [i]mysqldump -u username -p dbname table1 table2 ... > BackupName.sql[/i] dbname参数表示数据库的名称 table1和table2参数表示需要备份的表的名称,为空则整个数据库备份; BackupName.sql参数表设计备份文件的名称,文件名前面可以加上一个绝对路径。通常将数据库被分成一个后缀名为sql的文件; 基本使用: [img]http://files.jb51.net/file_images/article/201707/2017072808080824.png[/img] [b]2、管理工具[/b] [img]http://files.jb51.net/file_images/article/201707/2017072808080825.png[/img] 备份数据库的方法很多,上面两种比较常见 而本次主要讲解如何通过php函数来自动备份数据库 [b]2、相关函数介绍[/b] [b]2.1 、fopen[/b] 详情参考:http://www.w3school.com.cn/php/func_filesystem_fopen.asp [img]http://files.jb51.net/file_images/article/201707/2017072808080826.png[/img] [b]2.2、array_keys[/b] 详情参考:http://www.w3school.com.cn/php/func_array_keys.asp [img]http://files.jb51.net/file_images/article/201707/2017072808080827.png[/img] [b]2.3、array_values[/b] [img]http://files.jb51.net/file_images/article/201707/2017072808080828.png[/img] [b]2.4、implode[/b] 详情参考:http://www.w3school.com.cn/php/func_string_implode.asp [img]http://files.jb51.net/file_images/article/201707/2017072808080829.png[/img] [b]2.5、substr[/b] 详情参考:http://www.w3school.com.cn/php/func_string_substr.asp [img]http://files.jb51.net/file_images/article/201707/2017072808080830.png[/img] [b]2.6、fwrite[/b] 详情参考:https://www.w3cschool.cn/php/func-filesystem-fwrite.html [img]http://files.jb51.net/file_images/article/201707/2017072808080831.png[/img] [b]3、实现思路[/b] [img]http://files.jb51.net/file_images/article/201707/2017072808080832.png[/img] [b]4、代码构成[/b]
/**
 * [copyDb description] 备份数据库
 * @param [type] $dbname [description] 数据库名
 * @param [type] $fileName [description] 存储的文件名
 * @return [type]   [description]
 */
public function copyDb($dbname, $fileName){
 $myfile = fopen($fileName, "w") or die("Unable to open file!");//打开存储文件
 $this->link->query("use {$dbname}");//切换数据库
 $this->changeDb($dbname);
 $tables = $this->link->query('show tables');//获取当期数据库所有表名称
 while($re = $tables->fetch(PDO::FETCH_ASSOC)){
  //var_dump($re);//查看数组构成
  $tableName = $re['Tables_in_'.$dbname];//构成特定的下标
  $sql = "show create table {$tableName};";
  $tableSql = $this->link->query($sql);

  fwrite($myfile, "DROP TABLE IF EXISTS `{$tableName}`;\r\n");//加入默认删除表的遇见
  //下面备份表结构,这个循环之执行一次
  while($re = $tableSql->fetch(PDO::FETCH_ASSOC)){
   // echo "<pre>";
   // var_dump($re);
   // echo "</pre>";
   echo "正在备份表{$re['Table']}结构<br/>";
   fwrite($myfile, $re['Create Table'].";\r\n\r\n");
   echo "正在备份表{$re['Table']}结构完成<br/>";
  }
  //下面备份表数据
  echo "正在备份表{$tableName}数据<br/>";
  $sql = "select * from {$tableName};";
  $valueSql = $this->link->query($sql);
  while($re = $valueSql->fetch(PDO::FETCH_ASSOC)){
   $keyArr = array_keys($re);//获得对应的键值
   $valueArr = array_values($re);//获得对应的值
 
   $keyStr = '';
   foreach ($keyArr as $key => $value) {
    $keyStr .= "`".$value."`,";
   }
   $keyStr = substr($keyStr,0,strlen($keyStr)-1); //取出最后一个逗号


   $valueStr = '';
   // var_dump($valueArr);
   foreach ($valueArr as $key => $value) {
    $valueStr .= "'".$value."',";
   }
   //以上的处理只是对应sql的写法

   $valueStr = substr($valueStr,0,strlen($valueStr)-1); //取出最后一个逗号
   $sql = "insert into `{$tableName}`({$keyStr}) values({$valueStr})";
   fwrite($myfile, $sql.";\r\n\r\n");
   
  }
  echo "正在备份表{$tableName}数据完成<br/>";
  echo "<br/><hr/>";
 }
 fclose($myfile);
}
[b]5、结语[/b] 备份数据库的主要过程: 切换到对应的数据库; 使用show create table tableName,获得表结构,写到文件中; 然后查询所有的表数据,循环生成相对应sql语句,写到文件中; 试运行生成的sql文件; 以上这篇使用php自动备份数据库表的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部