Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/11/2009, 02:02
davicito
 
Fecha de Ingreso: marzo-2009
Mensajes: 480
Antigüedad: 15 años, 1 mes
Puntos: 1
Problema Modificar en Mysql Cuando Restauro en PHP

Hola,
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); 
      
$totalDeRegistrosmysql_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);    
  }