简体   繁体   中英

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; 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.

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:

   $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. 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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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