Tengo un problemita.
Lo que hago es una copia de seguridad desde PHP, luego la restauro y lo hace bien. Pero cuadno entro en MySQL y quiero modificar alguna tabla de dicha restauracion, no me deja editarla...
Utilizo el usuario Administrador en Mysql.
Hos enseño el codigo.
Código PHP:
$hacer_backup=$_POST[hacer_backup];
if($hacer_backup=='1'){
$usuario = "******";
$clave = "******";
$servidor = "******";
$baseDeDatos = "******";
/* Se conecta con la base de datos elegida. */
$conexion = mysql_connect($servidor,$usuario,$clave) or die(mysql_error());
@mysql_select_db($baseDeDatos,$conexion);
/* Se establece el nombre del fichero de la copia, incluyendo la fecha en curso. */
$fechaDeLaCopia = "-".date("d-m-Y");
$ficheroDeLaCopia = $baseDeDatos.$fechaDeLaCopia.".sql";
//COMPROBAR SI EXISTE EL ARCHIVO. ---------------------------------------
if (file_exists($ficheroDeLaCopia)) {
unlink($ficheroDeLaCopia);
}
//------------------------------------------------------------------------
/* Se genera el encabezamiento de la copia y se graba en el fichero correspondiente (el sql). */
$encabezamientoDeLaCopia = "# Copia de la base de datos creada el: ".date("d-m-Y")."\n# BBDD: $baseDeDatos \r\n";
$manejadorDelFicheroDeLaCopia = fopen($ficheroDeLaCopia,"a+b");
fwrite($manejadorDelFicheroDeLaCopia, $encabezamientoDeLaCopia);
$basededatos="CREATE DATABASE IF NOT EXISTS datos; \n USE datos; \n\n";
fwrite($manejadorDelFicheroDeLaCopia, $basededatos);
fclose($manejadorDelFicheroDeLaCopia);
/* Se genera una matriz con los nombres de las tablas que componen la BBDD. */
$matrizDeTablas = array();
$indiceDeLaMatrizDeTablas = 0;
$listadoDeTablas = mysql_list_tables($baseDeDatos);
for($recorridoDeTablas=0; $recorridoDeTablas<mysql_num_rows($listadoDeTablas); $recorridoDeTablas++){
$nombreDeTabla = mysql_tablename($listadoDeTablas,$recorridoDeTablas);
if ($nombreDeTabla <>"") {
$matrizDeTablas[$indiceDeLaMatrizDeTablas] = mysql_tablename($listadoDeTablas,$recorridoDeTablas);
/* Cada vez que se agrega un nombre de tabla a la matriz, se incrementa el índice de la misma, de modo
que, al terminar, tendremos el número total de tablas que conforman la BBDD. */
$indiceDeLaMatrizDeTablas++;
}
}
for ($recorridoDeTablas = 0; $recorridoDeTablas < $indiceDeLaMatrizDeTablas; $recorridoDeTablas++){
$autoincrementado="";
$nombreDeTabla=$matrizDeTablas[$recorridoDeTablas];
/* Se agrega a la consulta SQL el borrado de la tabla (si existe) y su posterior re-creación. */
$cadenaSQL = "";
$cadenaSQL .= "DROP TABLE IF EXISTS $nombreDeTabla; \n";
$cadenaSQL .= "CREATE TABLE $nombreDeTabla (\n";
$hacerConsultaDeLecturaDeEstructura = mysql_query("SHOW FIELDS FROM $nombreDeTabla",$conexion);
/* El cursor obtenido se recorre mediante un bucle, recuperando los datos de cada
campo y agregándolos a la consulta SQL que se almacenará en el fichero de la copia. */
while($row = mysql_fetch_array($hacerConsultaDeLecturaDeEstructura)) {
$cadenaSQL .= " $row[Field] $row[Type]"; // Se agrega el nombre del campo y su tipo.
if ($row["Default"] != "") $cadenaSQL .= " DEFAULT '$row[Default]'"; // Si hay un valor por defecto, se agrega también.
if ($row["Null"] != "YES") $cadenaSQL .= " NOT NULL"; // Si no se admite el vlalor NULL, se agrega la correspondiente especificación.
if ($row[Extra] != "") $cadenaSQL .= " $row[Extra]"; // Si hay alguna propiedad extraordinaria, como, por ejemplo, auto-increment, se agrega a la descripción del campo.
if (strstr (strtolower($row[Extra]),"auto_increment")) $autoincrementado=$row[Field];
$cadenaSQL .= ",\n"; // La descripción de cada campo se termina con una coma y un salto de línea
}
$cadenaSQL = ereg_replace(",\n$","", $cadenaSQL);
$hacerConsultaDeLecturaDeEstructura = mysql_query("SHOW KEYS FROM $nombreDeTabla",$conexion);
while($row = mysql_fetch_array($hacerConsultaDeLecturaDeEstructura)){
$nombreDeIndice=$row[Key_name];
if(($nombreDeIndice != "PRIMARY") && ($row[Non_unique] == 0)) $nombreDeIndice="UNIQUE|$nombreDeIndice";
if(!isset($listaDeIndices[$nombreDeIndice])) $listaDeIndices[$nombreDeIndice] = array();
$listaDeIndices[$nombreDeIndice][] = $row[Column_name];
}
/* Se agregan los índices a la cadena SQL que contendrá la copiade la base de datos.*/
$autoIncluido=FALSE;
while(list($tipoDeIndice, $columnas) = @each($listaDeIndices)){
$cadenaSQL .= ",\n";
if($tipoDeIndice == "PRIMARY") $cadenaSQL .= " PRIMARY KEY (" . implode($columnas, ", ") . ")";
else if (substr($tipoDeIndice,0,6) == "UNIQUE") $cadenaSQL .= " UNIQUE ".substr($tipoDeIndice,7)." (" . implode($columnas, ", ") . ")";
else $cadenaSQL .= " KEY $tipoDeIndice (" . implode($columnas, ", ") . ")";
if (implode($columnas, ", ")==$autoincrementado) $autoIncluido=TRUE;
}
if (!$autoIncluido && $autoincrementado>"") $cadenaSQL .= ",\n KEY $autoincrementado (" . $autoincrementado . ")";
$cadenaSQL .= "\n)ENGINE=InnoDB DEFAULT CHARSET=utf8; \n";
$manejadorDelFicheroDeLaCopia = fopen($ficheroDeLaCopia,"a+b");
fwrite($manejadorDelFicheroDeLaCopia, "# Tabla: ".$nombreDeTabla."\n\r".$cadenaSQL);
fclose($manejadorDelFicheroDeLaCopia);
unset($lineaDeDatos);
if ($nombreDeTabla>""){ //Si el nombre de la tabla es válido.
/* Se empieza recuperando todos los registros de la tabla. */
$hacerConsultaDeLecturaDeDatos=mysql_query("SELECT * FROM $nombreDeTabla", $conexion);
$totalDeRegistros= mysql_num_rows ($hacerConsultaDeLecturaDeDatos); // Se obtiene el total de registros.
$totalDeCampos = mysql_num_fields($hacerConsultaDeLecturaDeDatos); // Se onbtiene el total de campos.
/* Mediante un bucle se recorren todos los registros de la tabla. */
for ($cuentaDeRegistros=0;$cuentaDeRegistros<$totalDeRegistros;$cuentaDeRegistros++){
$matrizDeDatos=mysql_fetch_array($hacerConsultaDeLecturaDeDatos);
$lineaDeDatos.="INSERT INTO $nombreDeTabla ("; //Se añade la sentencia SQL para incorporar un registro.
/* Mediante un bucle se añaden los nombres de los campos. */
for ($cuentaDeCampos = 0; $cuentaDeCampos < $totalDeCampos;$cuentaDeCampos++){
$nombreDeCampo = mysql_field_name($hacerConsultaDeLecturaDeDatos, $cuentaDeCampos);
/* Si no es el último campo, se añade una coma y un espacio en blanco. */
if($cuentaDeCampos == ($totalDeCampos - 1)){
$lineaDeDatos.= $nombreDeCampo;
} else {
$lineaDeDatos.= $nombreDeCampo.",";
}
}
/* Formada la lista de campos, se añade la cláusula VALUES para incorporar los valores. */
$lineaDeDatos.=") VALUES (";
/* Mediante un bucle se añaden los valores, escapando los caracteres que sean necesarios. */
for ($cuentaDeCampos=0;$cuentaDeCampos < $totalDeCampos;$cuentaDeCampos++){
if($cuentaDeCampos == ($totalDeCampos - 1)){
$lineaDeDatos.="'".addslashes($matrizDeDatos[$cuentaDeCampos])."'";
} else {
$lineaDeDatos.="'".addslashes($matrizDeDatos[$cuentaDeCampos])."',";
}
/* Se añade un salto de línea, para pasar a la siguiente línea de datos */
}
$lineaDeDatos.= ");\n";
}
$lineaDeDatos.= "\n";
}
/* Se incorpora la línea de datos al fichero de la consulta SQL. */
$manejadorDelFicheroDeLaCopia = fopen($ficheroDeLaCopia,"a+b");
fwrite($manejadorDelFicheroDeLaCopia, $lineaDeDatos);
fclose($manejadorDelFicheroDeLaCopia);
}