通过客户端上传(.sql 文件)在 PHP 中恢复 MySQL 数据库

Restoring a MySQL database in PHP via client upload (.sql file)

好吧,我已经成功地获取了在 PHPMyAdmin 中创建的数据库,并使用 php 将其备份到客户端;现在我正在尝试将该数据库还原为同一环境中的新数据库。

我找到了在 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

?>

您的代码有很多问题(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)

真的需要仔细阅读你想在这里做的事情,因为它真的很危险,不应该初学者请勿尝试。