2015-07-02 27 views
0

好吧,我已經成功地在PHPMyAdmin中創建了一個數據庫,並使用php備份到客戶端;現在我試圖將該數據庫恢復爲同一環境中的新數據庫。通過客戶端上傳(.sql文件)在PHP中恢復MySQL數據庫

我發現了在mysql中工作的命令,但我似乎無法讓它與客戶端從他們的計算機上傳的文件一起工作。

下面是代碼,我現在所擁有的:

<?php 
    // display form if user has not clicked submit 
    if (!isset($_POST["btn_submit"])) 
    { 
?> 

<!--This will be the form that will hold the information of the entire page.--> 
<form enctype="multipart/form-data"class="elegant-aero" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    <h1>Restore Database</h1> 
    <p> 
     <label> 
      <span>Database File</span> 
      <input type="file" name="backupFile" value="Upload File"> 
     </label> 

     <!--Submit Button--> 
     <label> 
      <span>&nbsp;</span> 
      <input type="submit" name="btn_submit" class="button" value="Add Scenario"/> 
     </label> 
    </p> 
</form> 

<?php 

    } //end if 

    else 
    { 
     if(isset($_FILES['backupFile']['error']) && UPLOAD_ERR_OK == $_FILES['backupFile']['error']) 
     { 
      //Format sql file 
      $file = addslashes(file_get_contents($_FILES['backupFile']['tmp_name'])); 
     } //end if 

     //Set up the MySQL Server 
     $servername = "localhost"; 
     $username = "root"; 
     $password = "password";//hide your password 
     $dbname = "test"; 

     //Create connection to the MySQL server 
     $conn = new mysqli($servername, $username, $password); 

     $sql1 = "CREATE DATABASE test"; 

     if($conn->query($sql1) === TRUE) 
     { 
      echo "Database created successfully<br>"; 
     } else { 
      echo "Error creating database: " . $conn->error; 
     } //end else 

     $sql2 = "mysql --user={$username} --password={$password} --database={$dbname} < $file"; 

     if($conn->query($sql2) === TRUE) 
     { 
      echo "Information uploaded successfully<br>"; 
     } else { 
      echo "Error uploading information: " . $conn->error; 
     } //end else 

    } //end else 

?> 
+0

您在代碼中包含了您的用戶名和密碼。 – FlipperPA

+0

是的,希望你改變了你的密碼 –

+0

你很容易受到[sql注入攻擊](http://bobby-tables.com)('addslashes()'是** NOT **防禦),也容易受到shell再次注射攻擊,'addslashes()'不是辯護。 –

回答

1

有你的代碼(哪裏fileScenDetails來自什麼形式發生backupFile?),但根據您的問題一堆問題:

$sql2 = "mysql --user={$username} --password={$password} --database={$dbname} < $file"; 

    if($conn->query($sql2) === TRUE) 
    { 
     echo "Information uploaded successfully<br>"; 
    } else { 
     echo "Error uploading information: " . $conn->error; 
    } //end else 

您試圖運行* nix命令作爲數據庫查詢。相反的:

if($conn->query($sql2) === TRUE) 

你需要做這樣的事情:

if(exec($sql2) === TRUE) 

真的需要在你想在這裏做什麼讀了,因爲它是真的危險的,不應該由初學者嘗試。

+0

我的不好,fileScenDetails應該是backupFile。 我一直在研究這一整天,那個nix命令是我能找到的唯一的東西。 –

+0

Ok FlipperPA我試過這個修復,它的默認是我的錯誤命令;但我只知道如何從mysqli獲得錯誤($ conn-> error);我如何從這個exec命令中獲取錯誤? –

+0

您可以使用PHP的'echo'命令來查看您實際運行的是什麼:'echo $ sql2;'然後嘗試在命令行運行echo'd,並且您應該看到發生錯誤。同樣,我強烈建議讀一下這個;某人利用安全漏洞的可能性非常高。祝你好運。 – FlipperPA