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.
<?phpif (! 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;
}
?>
0 Comentarios