duanbage2161
duanbage2161
2017-11-06 06:01
浏览 51
已采纳

使用php代码备份SQL数据库但它保存了空白的sql文件

This is my code in backing up my database,, its working now but all i can get is an empty SQL file,. can anyone help me about this? And what am i going to use, mysqlidump or mysqldump?

<?php
$cookie_name = "abc";
$cookie_value = "nk";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day

define("BACKUP_PATH","C:/wamp64/www/db/dbbackup/");

$dump_path = "db/dbbackup/";
$dbhost = "localhost";
$username = "root";
$password = "";
$dbname = "trust";
$date_string = date('Ymd');
$user_id = $_COOKIE["abc"];
$command = "mysqldump --routines -h {$dbhost} -u {$username} {$dbname} >". BACKUP_PATH ."{$date_string}_{$dbname}.sql";
system($command);

echo "<script> alert('backup saved'); window.location.href='setting.php?id=".$user_id."' </script>";?>
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongna2498
    dongna2498 2017-11-06 06:12
    已采纳

    try this code

    just add your database name , host,password etc

    syntax

    EXPORT_TABLES("localhost","user","pass","db_name" );
    

    code:

    <?php
    
    function EXPORT_TABLES($host,$user,$pass,$name,$tables=false, $backup_name=false){ 
        set_time_limit(3000); $mysqli = new mysqli($host,$user,$pass,$name); $mysqli->select_db($name); $mysqli->query("SET NAMES 'utf8'");
        $queryTables = $mysqli->query('SHOW TABLES'); while($row = $queryTables->fetch_row()) { $target_tables[] = $row[0]; }   if($tables !== false) { $target_tables = array_intersect( $target_tables, $tables); } 
        $content = "SET SQL_MODE = \"NO_AUTO_VALUE_ON_ZERO\";
    SET time_zone = \"+00:00\";
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    --
    -- Database: `".$name."`
    --
    
    
    ";
        foreach($target_tables as $table){
            if (empty($table)){ continue; } 
            $result = $mysqli->query('SELECT * FROM `'.$table.'`');     $fields_amount=$result->field_count;  $rows_num=$mysqli->affected_rows;     $res = $mysqli->query('SHOW CREATE TABLE '.$table); $TableMLine=$res->fetch_row(); 
            $content .= "
    
    ".$TableMLine[1].";
    
    ";
            for ($i = 0, $st_counter = 0; $i < $fields_amount;   $i++, $st_counter=0) {
                while($row = $result->fetch_row())  { //when started (and every after 100 command cycle):
                    if ($st_counter%100 == 0 || $st_counter == 0 )  {$content .= "
    INSERT INTO ".$table." VALUES";}
                        $content .= "
    (";    for($j=0; $j<$fields_amount; $j++){ $row[$j] = str_replace("
    ","\
    ", addslashes($row[$j]) ); if (isset($row[$j])){$content .= '"'.$row[$j].'"' ;}  else{$content .= '""';}     if ($j<($fields_amount-1)){$content.= ',';}   }        $content .=")";
                    //every after 100 command cycle [or at last line] ....p.s. but should be inserted 1 cycle eariler
                    if ( (($st_counter+1)%100==0 && $st_counter!=0) || $st_counter+1==$rows_num) {$content .= ";";} else {$content .= ",";} $st_counter=$st_counter+1;
                }
            } $content .="
    
    
    ";
        }
        $content .= "
    
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;";
        $backup_name = $backup_name ? $backup_name : $name."___(".date('H-i-s')."_".date('d-m-Y').")__rand".rand(1,11111111).".sql";
        ob_get_clean(); header('Content-Type: application/octet-stream');   header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=\"".$backup_name."\"");
        echo $content; exit;
    }      //see import.php too
    ?>
    
    点赞 评论

相关推荐