Importa tu base de datos con PHP

A menuda solemos importar nuestras bases de datos mediante una aplicación destinada a ello, como por ejemplo PHPMyAdmin. Pero también podemos desarrollar nosotros mismos una aplicación para dicho menester. Ya hemos hablado por aquí sobre cómo realizar un backup de una base de datos, pero en esta ocasión lo que haremos será importar una base de datos a través de una aplicación PHP desarrollada por nosotros mismos.

Antes que nada, tenemos que tener a nuestra disposición el archivo SQL que queramos importar en nuestra base de datos, ya sea un backup de un BD completa, o bien, una serie de sentencias que queramos ejecutar. Enviaremos esta serie de sentencias a un script de PHP mediante un formulario HTML. En el archivo PHP validaremos si el fichero enviado se trata de un fichero con la extensión .sql. Una vez validado, la función de PHP leerá el fichero y devolverá un array con las queries que se van a ejecutar. Recorreremos este array y ejecutaremos las queries una a una para importar nuestra base de datos.

Formulario HTML para importar la base de datos MySQL

Utilizaremos este código PHP para crear la interfaz que permitirá al usuario subir su fichero .sql, y así importar la base de datos. Una vez el usuario ha subido el fichero, informaremos al usuario sobre si la ejecución del fichero ha sido satisfactoria o, en caso contrario, ha habido errores.

<?php
if (! empty($response)) {
    ?>
<div class="response <?php echo $response["type"]; ?>
    ">
    <?php echo nl2br($response["message"]); ?>
</div>
<?php
}
?>
<form method="post" action="" enctype="multipart/form-data"
    id="frm-restore">
    <div class="form-row">
        <div>Choose Backup File</div>
        <div>
            <input type="file" name="backup_file" class="input-file" />
        </div>
    </div>
    <div>
        <input type="submit" name="restore" value="Restore"
            class="btn-action" />
    </div>
</form>

Código PHP para importar la base de datos MySQL

Este código PHP recibe el fichero y valida su extensión antes de procesarlo. Si el fichero no cuenta con la extensión .sql, se mostrará un error al usuario. En caso contrario, el fichero se parseará y se almacenarán todas las sentencias en un array. Después, estas sentencias se ejecutarán mediante un bucle y así, se importará la base de datos.

<?php
$conn = mysqli_connect("localhost", "root", "test", "phppot_examples");
if (! empty($_FILES)) {
    // Validating SQL file type by extensions
    if (! in_array(strtolower(pathinfo($_FILES["backup_file"]["name"], PATHINFO_EXTENSION)), array(
        "sql"
    ))) {
        $response = array(
            "type" => "error",
            "message" => "Invalid File Type"
        );
    } else {
        if (is_uploaded_file($_FILES["backup_file"]["tmp_name"])) {
            move_uploaded_file($_FILES["backup_file"]["tmp_name"], $_FILES["backup_file"]["name"]);
            $response = restoreMysqlDB($_FILES["backup_file"]["name"], $conn);
        }
    }
}

function restoreMysqlDB($filePath, $conn)
{
    $sql = '';
    $error = '';
    
    if (file_exists($filePath)) {
        $lines = file($filePath);
        
        foreach ($lines as $line) {
            
            // Ignoring comments from the SQL script
            if (substr($line, 0, 2) == '--' || $line == '') {
                continue;
            }
            
            $sql .= $line;
            
            if (substr(trim($line), - 1, 1) == ';') {
                $result = mysqli_query($conn, $sql);
                if (! $result) {
                    $error .= mysqli_error($conn) . "n";
                }
                $sql = '';
            }
        } // end foreach
        
        if ($error) {
            $response = array(
                "type" => "error",
                "message" => $error
            );
        } else {
            $response = array(
                "type" => "success",
                "message" => "Database Restore Completed Successfully."
            );
        }
    } // end if file exists
    return $response;
}
?>

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP