Foros del Web » Programando para Internet » PHP »

Ejecutar fichero sql desde php

Estas en el tema de Ejecutar fichero sql desde php en el foro de PHP en Foros del Web. Buenas, estoy diseñando una aplicación (php) que permite generar copias de seguridad de la base de datos (mysql). Genero el fichero correctamente con YoDumpeo y ...
  #1 (permalink)  
Antiguo 26/11/2010, 04:55
 
Fecha de Ingreso: noviembre-2010
Ubicación: España
Mensajes: 5
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta Ejecutar fichero sql desde php

Buenas,

estoy diseñando una aplicación (php) que permite generar copias de seguridad de la base de datos (mysql). Genero el fichero correctamente con YoDumpeo y de hecho con la importación que ofrece phpMyAdmin funciona de maravilla.

El problema es que no acierto a encontrar una forma de importar la BD vía php, para que el usuario lo haga desde la aplicación que estoy diseñando y no desde phpMyAdmin...

He probado a crear un script que lo haga leyendo el fichero, pero a pesar de perder días atascado no he conseguido absolutamente nada. Intentando envíar las sentencias una a una da error de sintaxis y ciertamente no tengo ni idea de porqué (he probado con mysql_real_escape_expression(), eliminando caracteres ascii de retorno de carro y salto de linea, y muchas cosas más...)

Bueno, muchas gracias, un saludo
  #2 (permalink)  
Antiguo 26/11/2010, 15:30
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Ejecutar fichero sql desde php

Yo creo que lo logré alguna vez, pero luego el script ya no me funciona. A ver si te sirve de referencia al menos:

Código PHP:
Ver original
  1. include "conection.php";
  2.     $installDataBase = mysqli_connect($dbhost, $dbusuario, $dbpassword, $db);
  3.    
  4.     if (!$installDataBase) {
  5.     die('Connect Error (' . mysqli_connect_errno() . ') '
  6.             . mysqli_connect_error());
  7.     };
  8.    
  9.     $backupSource =  file_get_contents('installDataBase.sql');
  10.  
  11.     //if(mysqli_multi_query($installDataBase, $backupSource)){
  12.         do {
  13.             /* store first result set */
  14.             if ($result = mysqli_store_result($installDataBase)) {
  15.                 while ($row = mysqli_fetch_row($result)) {
  16.                     printf("%s\n", $row[0]);
  17.                 }
  18.                 mysqli_free_result($result);
  19.             }
  20.             /* print divider */
  21.             if (mysqli_more_results($installDataBase)) {
  22.                 printf(".");
  23.             }
  24.         } while (mysqli_next_result($installDataBase));
  25.  
  26.         echo "<h3>Tables successfully created. </h3>";
  27.         $ok1 = true;
  28.         /* close connection */
  29.         mysqli_close($installDataBase);
  30.         //} else echo "<h3>Error: </h3>".mysql_error();
  #3 (permalink)  
Antiguo 27/11/2010, 05:29
 
Fecha de Ingreso: noviembre-2010
Ubicación: España
Mensajes: 5
Antigüedad: 13 años, 5 meses
Puntos: 0
De acuerdo Respuesta: Ejecutar fichero sql desde php

Vaya tio...no se como agradecértelo, llevaba mas de 15 horas perdidas con el tema, ya estaba a empezando a desesperarme. Es script funciona de maravilla. Eso sí, he quitado los comentarios y tal, te lo dejo aqui como me está funcionando:

Código PHP:
$installDataBase mysqli_connect($dbhost$dbusuario$dbpassword$db);
    
            if (!
$installDataBase)
            {
                die(
'Connect Error ('.mysqli_connect_errno(). ') '.mysqli_connect_error());
            };
            
            
$backupSource =  file_get_contents($GB_ABSOLUTE_PATH.'/copiaSeg/'.$archivo);
         
            if(
mysqli_multi_query($installDataBase$backupSource)){
                do {
                    
/* Almacenar el primer conjunto de resultados */
                    
if ($result mysqli_store_result($installDataBase)) {
                        while (
$row mysqli_fetch_row($result)) {
                            
printf("%s\n"$row[0]);
                        }
                        
mysqli_free_result($result);
                    }
                    
/* Impresion del divisor */
                    
if (mysqli_more_results($installDataBase)) {
                        
printf(".");
                    }
                } while (
mysqli_next_result($installDataBase));
                echo 
"<h3>>> El proceso de restauración se completó con éxito.</h3>";
                
                
/* Cerramos la conexión */
                
mysqli_close($installDataBase); 
            } else echo 
"<h3>Error: </h3>".mysql_error(); 

El tema de que no te funcione ahora puede ser por varias cosas:

a) Si dejas esta linea comentada es posible que no se asocie el fichero leído a tu conexión mysqli.

if(mysqli_multi_query($installDataBase, $backupSource))

b) Las funciones mysqli están diseñadas solo para ciertas versiones de php y mysql: http://www.forosdelweb.com/f18/mysqli-mismo-que-mysql-428741/. Si cambiaste de servidor o de versión de php o mysql, o el servidor donde lo tienes subido cambió sus versiones es posible que te deje de funcionar.

c) A mi solo me importaba ciertas tablas, concretamente hasta una en la que aparecía una 'ñ'. Es posible que la codificación de caracteres no sea la adecuada y recientemente hayas insertado caracteres problemáticos.

De todos modos soy inexperto en programación, no se si te podrá servir.

¡MIL GRACIAS!

Última edición por jacobin84; 27/11/2010 a las 05:35

Etiquetas: fichero, sql, yodumpeo
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 17:38.