简体   繁体   English

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

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

Alright, so I've successfully been able to take a database created in PHPMyAdmin, and back it up to the client with php; 好了,所以我已经能够成功地使用PHPMyAdmin创建一个数据库,并使用php将其备份到客户端。 now I'm trying to restore that database as a new database within the same environment. 现在,我正在尝试将该数据库还原为同一环境中的新数据库。

I've found the command that works within mysql, but I can't seem to get it to work with a file that the client uploads from their computer. 我已经找到了可以在mysql中运行的命令,但是似乎无法使其与客户端从其计算机上载的文件一起使用。

Here is the code I have right now: 这是我现在拥有的代码:

<?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

?>

There are a bunch of problems with your code (Where does fileScenDetails come from? What happened to backupFile in the form?), but per your question: 您的代码有很多问题(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

You're trying to run a *nix command as a database query. 您正在尝试运行* nix命令作为数据库查询。 Instead of: 代替:

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

You'd need to do something like: 您需要执行以下操作:

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

You really need to read up on what you're trying to do here, as is it really dangerous, and shouldn't be attempted by beginners. 确实需要在这里仔细阅读您要尝试做的事情,因为这样做真的很危险,因此初学者不应该尝试。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM