php MySQL数据备份方法

admin admin 2024-06-24 164 阅读 0 评论

/**
* @param $table
* @return array|bool|int
* 数据表备份导出
*/
function backup($table){
   //打开缓冲
   open_buffer();
   $path = base_path().'admin/data/backup/database/';
   if(!file_exists($path)){
       mkdir($path,0777,true);
   }
   $filename = $path.date('Ymd-His').'.sql';
   //备份表结构
   $result = Db::query("SHOW CREATE TABLE `{$table}`");
   $sql  = "\n";
   $sql .= "-- -----------------------------\n";
   $sql .= "-- Table structure for `{$table}`\n";
   $sql .= "-- -----------------------------\n";
   $sql .= "DROP TABLE IF EXISTS `{$table}`;\n";
   $sql .= trim($result[0]['Create Table']) . ";\n\n";
   if(false === file_put_contents($filename,$sql,FILE_APPEND)){
       return false;
   }

   //数据总数
   $result = Db::query("SELECT COUNT(*) AS count FROM `{$table}`");
   $count  = $result['0']['count'];

   //备份表数据
   if($count){
       //写入数据注释
       $sql  = "-- -----------------------------\n";
       $sql .= "-- Records of `{$table}`\n";
       $sql .= "-- -----------------------------\n";
       file_put_contents($filename,$sql,FILE_APPEND);

       //备份数据记录
       //计算页面码
       $ce = ceil($count/1000)-1;
       $size = 1000;
       for($i=0;$i<=$ce;$i++){
           $limit = ($i+1-1)*$size;
           $result = Db::query("SELECT * FROM `{$table}` LIMIT {$limit},$size");
           $rows = count($result)-1;
           $sql = "INSERT INTO `{$table}` VALUES ";
           file_put_contents($filename,$sql,FILE_APPEND);
           foreach ($result as $k=>$row) {
               $one = '';
               foreach ($row as $v){
                   $one .= (gettype($v) == 'string') ? "'".$v."'," : $v.",";
               }
               $one = rtrim($one,',');
               $one = str_replace(["\n","\r"],'',$one);
               if($rows == $k){
                   $sql .= "(" . $one . ");\n";
               }else{
                   $sql .= "(" . $one . "),\n";
               }
           }
           file_put_contents($filename,$sql,FILE_APPEND);
           //输出缓冲
           output_buffer();
       }
   }
   return ['code'=>200,'msg'=>'完成操作'];
}

注:该示例为tp8中使用,可根据自己的实际需求进行修改

上一篇 下一篇

相关阅读

发表评论

访客 访客
快捷回复: 表情:
评论列表 (有 0 条评论,164人围观)