2ª Parte continuación de Restaurar de 2016
Código PHP:
// PROBLEMAS EN LA INTERPRETACION DEL JUEGO DE CARACTERES
$strSQL= convertir_utf8($strSQL);
// Elimina lineas vacias o que empiezan por -- # // o entre /* y */
// Elimna los espacios en blanco entre ; y \r\n
// handle DOS and Mac encoded linebreaks
$strSQLs=preg_replace("/\r\n$/","\n",$strSQLs);
$strSQLs=preg_replace("/\r$/","\n",$strSQLs);
$strSQLs = trim(preg_replace('/ {2,}/', ' ', $strSQLs)); // ----- remove multiple spaces -----
$strSQLs = strtr($strSQLs, array("\r" =>"")); //los \r\n los dejamos solo en \n
if ($fixUtf8) { $strSQLs = strtr($strSQLs, array("latin1" => "utf8"));}
$BD=CadenaAcotada($strSQLs,"USE `","`");
if(!empty($NewBD)) {
if ($BD) $strSQLs = strtr($strSQLs,array("`".$BD."`" => "`".$NewBD."`"));
echo "********** $BD --> $NewBD ******************************************";
$BD =$NewBD;
}
run_sql($strSQLs,$BD, $host, $usuario,$passwd, $DropDataBase,$InsertDatos,$VerSoloErrores,$tblName);
echo " <br>---FIN IMPORTACION---";
return $BD;
}
?>
<h3>RESTAURAR COPIA DE SEGURIDAD MySQL. (version: 21-2-2016) ---------> <a href='BackupMySQL-i.php'> Ir a BackupMySQL-i.php <a> </h3>
<FORM action="<?php echo $_SERVER['PHP_SELF']?>" method="POST" enctype="multipart/form-data">
<p><b>Fichero (*.sql):</b>
<INPUT type="file" name="userfile"><br />
<INPUT type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAXFILESIZE?>">
<b>Servidor :</b>
<INPUT type="text" name="host" id ="host" value="localhost"><br />
<b>Usuario :</b>
<INPUT type="text" name="usuario" id ="usuario" value="root"><br />
<b>Contraseña : </b>
<INPUT type="text" name="passwd" id="passwd" value="gtjclm"><br />
<input name="DropDataBase" id="DropDataBase" type="checkbox" value="true" TITLE="Primero DROP DATABASE"/> Primero ejecutar DROP DATABASE <br />
<input name="InsertDatos" id="InsertDatos" type="checkbox" value="true" checked="checked" TITLE="Restaurar inserciones de datos "/> Restaurar inserciones de datos <br />
<input name="VerSoloErrores" id="VerSoloErrores" type="checkbox" value="true" checked="checked" /> Mostrar solo errores (no cada linea de ejecucion) <br />
<input name="fixUtf8" id="fixUtf8" type="checkbox" value="true" />Cambiar charset a utf8 <br />
<br />
O P C I O N A L <br />
<b>Restaurar solo la Tabla :</b> <INPUT type="text" name="tblName" id ="tblName" value=""><br />
<b>Restaurar en otra Base de Datos con nombre distinto al que origino la copia: </b>: <INPUT type="text" name="NewBD" id="NewBD" value="">
</p>
<h6>( <u>nota:</u> Restaurar en otra Base de Datos se usa para restaurar en cualquier otra Base de datos distinta a la que se genero la copia. Si no existe la nueva base de datos, la crea. <br> SI HAY UNA TABLA o VISTA CON EL MISMO NOMBRE DE LA BASE DE DATOS QUE ORIGINO LA COPIA DE SEGURIDAD, FALLARA LA IMPORTACION EN OTRA BASE DE DATOS CON NOMBRE DISTINTO)</h6>
<INPUT type="submit" name="upload" id="upload" value="[ Restaurar ]">
<BR /><BR />
<b> Base datos para ejecutar SQL :</b>
<?PHP //<INPUT type="text" name="BD" id ="BD" value=" <?PHP echo $BD; ? > ">
$conexion = new mysqli($host, $usuario, $passwd) or die ("No se puede conectar con MySQL: %s\n". $conexion->connect_error);
if (!$conexion->set_charset("utf8")) { // cambiar el conjunto de caracteres a utf8
printf("Error cargando el conjunto de caracteres utf8: %s\n", $conexion->error);
exit();
}
$strSQL = "SHOW DATABASES;"; //SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = :database AND TABLE_NAME = :table
$respuesta = $conexion->query($strSQL)or die("No se puede ejecutar la consulta: $strSQL MySQL: \n". $conexion->error);
$BaseDatos = $respuesta->num_rows;
$opcionesSelect="";
while ($BaseDatos = $respuesta->fetch_array(MYSQLI_NUM)) {
if ($BaseDatos[0] == $BD){
$opcionesSelect.= "<option value='$BaseDatos[0]' selected='selected'> $BaseDatos[0] </option>";
} else $opcionesSelect.= "<option value='$BaseDatos[0]'> $BaseDatos[0] </option>";
}
$respuesta->free();
$conexion->close();
echo "<select name='BD' id='BD' size='$BaseDatos' >
$opcionesSelect
</select> <BR />";
?>
<br />
<INPUT type="submit" name="runSQL" id="runSQL" value="[ Seleccionar Base Datos ]"
/>
</FORM>
<?PHP
if (isset($_POST['DoSQL'])) {
echo "procesando peticion de formulario SQL.....";
// CONEXION
$conexion = new mysqli($host, $usuario, $passwd,$BD) or die ("No se puede conectar con MySQL: %s\n". $conexion->connect_error);
if (!$conexion->set_charset("utf8")) { // cambiar el conjunto de caracteres a utf8
printf("Error cargando el conjunto de caracteres utf8: %s\n", $conexion->error);
exit();
}
if (!empty($_POST['Tablas']))
foreach ($_POST['Tablas'] as $tabla){
Switch ($_POST['OpSQL']){
case 'Select':
$strSQL="SELECT * FROM `".$tabla."`; ";
echo "<BR /><BR /><BR /><BR /><BR /><H1><U>".$tabla."</U></H1>";
echo TableToHTML($conexion, $strSQL);
break;
case 'Empty':
$strSQL="TRUNCATE TABLE `".$tabla."`; ";
$respuesta = $conexion->query( $strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
break;
case 'Drop':
$strSQL="DROP TABLE `".$tabla."`; ";
$respuesta = $conexion->query( $strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
break;
case 'Rename':
$newTabla = $tabla.date("_d_m_Y");
$strSQL="RENAME TABLE `".$tabla."` TO ".$newTabla."; ";
$respuesta = $conexion->query( $strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
break;
case 'Duplicate':
$newTabla = $tabla.date("_d_m_Y");
$strSQL="CREATE TABLE `".$newTabla."` LIKE `".$tabla."`; ";
$respuesta = $conexion->query( $strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
$strSQL="ALTER TABLE `".$newTabla."` DISABLE KEYS; ";
$respuesta = $conexion->query( $strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
$strSQL="INSERT INTO `".$newTabla."` SELECT * FROM `".$tabla."`; ";
$respuesta = $conexion->query( $strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
$strSQL="ALTER TABLE `".$newTabla."` ENABLE KEYS; ";
$respuesta = $conexion->query( $strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
$strSQL='SELECT CONCAT_WS(" "," CREATE TRIGGER ",CONCAT_WS("_","'.$tabla.'", ACTION_TIMING,EVENT_MANIPULATION), ACTION_TIMING,EVENT_MANIPULATION, " ON '.$tabla.' FOR EACH ROW ",ACTION_STATEMENT," " ) AS x
FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_SCHEMA = database() AND EVENT_OBJECT_TABLE = "'.$tabla.'";';
$rs = $conexion->query( $strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
$num_rows= $rs->num_rows;
if ( $num_rows <> 0) {
While ($regSELECT= $rs->fetch_assoc()){
$strSQL=$regSELECT["x"];
$rsRUN = $conexion->query( $strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
}
}
break;
case 'ShowCreateTable':
$strSQL="SHOW CREATE TABLE `".$tabla."`";
echo "<BR /><BR /><BR /><BR /><BR /><H1><U>".$strSQL."</U></H1>";
echo TableToHTML($conexion, $strSQL);
$strSQL='SELECT "'.$tabla.'" as Tabla,CONCAT_WS(" "," CREATE TRIGGER ",CONCAT_WS("_","'.$newTabla.'",ACTION_TIMING,EVENT_MANIPULATION), ACTION_TIMING,EVENT_MANIPULATION, " ON '.$newTabla.' FOR EACH ROW ",ACTION_STATEMENT," " ) AS Def_TRIGGER
FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_SCHEMA = database() AND EVENT_OBJECT_TABLE = "'.$tabla.'";';
echo TableToHTML($conexion, $strSQL);
break;
case 'ShowTableStatus':
$strSQL="SHOW TABLE STATUS LIKE '".$tabla."' ";
echo "<BR /><BR /><BR /><BR /><BR /><H1><U>".$strSQL."</U></H1>";
echo TableToHTML($conexion, $strSQL);
break;
}
}
if (!empty($_POST["strSQL"])){
echo "<BR /><BR /><H6><U>".$_POST["strSQL"]."</U></H6>";
$strSQLs = $_POST["strSQL"];
$Instruccion=substr($strSQLs,0,4);
if (false === strripos("SHOW,SELE,DESC",$Instruccion)){
run_sql($strSQLs,$BD, $host, $usuario,$passwd, $DropDataBase,$InsertDatos,$VerSoloErrores,$tblName);
} else {
echo TableToHTML($conexion, $strSQLs);
}
}
$conexion->close();
}