Foros del Web » Programando para Internet » PHP »

explicacion de codigo respaldar datos

Estas en el tema de explicacion de codigo respaldar datos en el foro de PHP en Foros del Web. hola miren tengo un codigo que segun dicen, respalda datos por medio de este codigo, nunca habia hecho cosas de backup por codigo, ya conocen ...
  #1 (permalink)  
Antiguo 27/03/2013, 00:12
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
explicacion de codigo respaldar datos

hola miren tengo un codigo que segun dicen, respalda datos por medio de este codigo, nunca habia hecho cosas de backup por codigo,

ya conocen de estas cosas=? para un sistema esta bien esto de guardar datos,
pero nunca lo use.... algunas cosas de mysql no son de uso comun, digo . son basicas, pero no se usan seguido... por ejemplo en el momento de hacer un select.. en el codigo hay un "show tables"...
que me devuelve la consulta registros de las tablas??:::.. bueno ahi va el codigo...



Código PHP:
        include('sistema/modulos/bd/con_bd.php');
          
$tables '*';
          
//get all of the tables
          
if($tables == '*')
          {
            
$tables = array();
            
$result mysql_query('SHOW TABLES');
            while(
$row mysql_fetch_row($result))
            {
              
$tables[] = $row[0];
              
$result1 mysql_query('SELECT * FROM '.$row[0]) or die (mysql_error());
              
#echo "<br>";
              
$num_fields1 mysql_num_rows($result1);
              
#echo "<br>";
              
$total $total $num_fields1;
            }
          }
          else
          {
            
$tables is_array($tables) ? $tables explode(',',$tables);
          }
          
          
//cycle through
          
foreach($tables as $table)
          {
            
$result mysql_query('SELECT * FROM '.$table) or die (mysql_error());
            
$num_fields mysql_num_fields($result);
            
            
$return.= 'DROP TABLE '.$table.';';
            
$row2 mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
            
$return.= "\n\n".$row2[1].";\n\n";
            
            for (
$i 0$i $num_fields$i++) 
            {
              while(
$row mysql_fetch_row($result))
              {
                
$return.= 'INSERT INTO '.$table.' VALUES(';
                
$counter $counter 1;
                
$barpp $percent 2;
                
$percent ceil(($counter 100 )/$total);
                echo 
"<script>";
                echo 
"document.getElementById('val1').value = 'Procesado: ".$counter." registros de ".$total."';";
                echo 
"document.getElementById('val2').value = '".$percent."%';";
                echo 
"document.getElementById('val3').value = 'Copiando: ".$table."';";
                echo 
"document.getElementById('bar').style.left = '".$barpp."px';";
                echo 
"</script>";
                for(
$j=0$j<$num_fields$j++) 
                {
                  
$row[$j] = addslashes($row[$j]);
                  
$row[$j] = ereg_replace("\n","\\n",$row[$j]);
                  if (isset(
$row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
                  if (
$j<($num_fields-1)) { $return.= ','; }
                }
                
$return.= ");\n";
              }
            }
            
$return.="\n\n\n";
          }
                echo 
"<script>";
                echo 
"document.getElementById('barra').style.display = 'none';";
                echo 
"document.getElementById('val3').style.display = 'none';";
                echo 
"document.getElementById('val2').style.display = 'none';";
                echo 
"document.getElementById('loading').style.display = 'block';";
                echo 
"document.getElementById('val1').value = 'Grabando la copia local.';";
                echo 
"</script>";
          
//save file comprobar si existe el dir sino crear
          
          
        
$archivo_local 'sistema/modulos/backup/'.$_SESSION['db'].'/'.$_SESSION['db'].'-'.time().'.sql';
        
#$archivo_remoto =  $db.'-'.time().'.sql';
        
$handle fopen($archivo_local,'w+');
        
fwrite($handle,$return);
        
fclose($handle);

        
$time time();
        
$dir_loc $_SESSION['parent'].$archivo_local;
        include(
'sistema/modulos/bd/conexion.antilae.php');
        
$principal="INSERT INTO respaldo ( fecha, dir_loc, dir_rem, idsistema) VALUES ( '{$time}', '{$dir_loc}', '{$archivo_remoto}', '{$_SESSION['db']}')";
        
$insertar mysql_query($principal) ;
                echo 
"<script>";
                echo 
"document.getElementById('loading').style.display = 'none';";
                echo 
"document.getElementById('tick').style.display = 'block';";
                echo 
"document.getElementById('val1').value = 'Finalizado.';";
                echo 
"</script>"
bueno la idea es saber si es comun, esto de hacer respaldos. de datos,
genera un sql...

bueno coloco lo que entiendo si no van a decir, "que queres que te expliquemos el codigo? "



de entrada no entiendo por que el tables (en las primeras lineas), se asigna como asterisco, para luego tener un if, donde hay un else, entonces ese ELSE nunca se ingresa no??

............

despues hay un if, donde se ingresa siempre ya que compara si es asterisco bueno ingresa..

al princio, de todo, hace un include ese include, lo que tiene ese....

Código PHP:
<?php
$dbhost
="hosttt"
$dbuser="userr"
$dbpass="passs";
$db="basedatos"
mysql_connect("$dbhost","$dbuser","$dbpass")or die ("Error en la conexión a su base de datos.");
mysql_select_db("$db");
?>

teniendo la conexion por el include, hago una consulta sql...

$result = mysql_query('SHOW TABLES');

que me devuelve "show tables" nunca la habia escuchado...

es muy probable, ya que devuelva un registro, no recuerdo si con el mysql_fetch_row, devolvia solo un registro, o con el while iba pasado todos, de a uno...

bueno el tema es que toma el primer campo, con $row[0] y este es una tabla, trae todos los registros, y los acumula en un total,,,

despues esta el else que como dije no se como llega ahi,,,,

..........................

antes de ingresar al foreach, que tiene esta tabla, un registros o varios,,
son nombres de tablas,,,,
no=?

bueno y despues sigue,,, si quieren explicar, algo, expliquen o luego sigo yo, pero dejo el codigo asi masomenos lo ven,, que guarda=?? creo que un sql... escribe, no se bien...
  #2 (permalink)  
Antiguo 27/03/2013, 03:25
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: explicacion de codigo respaldar datos

En resumen:

1- SHOW TABLES te da un listado de las tablas que hay en la base de datos seleccionada y obtienes una por una con mysql_fetch_*()

2- Al recorrer cada tabla (foreach):
2.1- Selecciona todos los registros
2.2- Agrega la sentencia DROP nombre_de_tabla para eliminarla antes de crearla nuevamente
2.3- SHOW CREATE TABLE nombre_de_tabla devuelve nombre y sentencia SQL para crear la tabla con sus respectivos campos e índices
2.4- Se recorren los registros agregando la sentencia INSERT para cada uno

3- Se guardan todas las sentencias en un archivo .sql y listo!

Este tipo de scripts es útil para respaldar la base de datos si el usuario no tiene acceso a la consola MySQL, o a PhpMyAdmin o, mejor aún, para dejarlo como tarea programada y garantizar que tendrás un respaldo reciente en caso de alguna emergencia.

El único defecto que le veo es que va guardando todas las sentencias SQL en variables y podría saturar la memoria disponible para PHP. Sería mejor ir guardando cada vez, posiblemente usando file_put_contents().

Finalmente, creo que necesitas repasar el manual de PHP para las funciones mysql_fetch_array, mysql_fetch_assoc, mysql_fetch_row, mysql_result, etc. para que veas lo que devuelve cada una de ellas y en qué forma.

Agrego otro par de defectos del script:

- Usa addslashes() en lugar de mysql_real_escape_string() para "escapar" los datos.
- Usa ereg_replace (función obsoleta) para reemplazar saltos de línea. Incluso creo que podría funcionar sin expresiones regulares un simple str_replace(), pero habrá que probarlo.
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: mysql, registro, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:24.