elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Ayuda] Script de PHP no funciona igual que el phpmyadmin
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Script de PHP no funciona igual que el phpmyadmin  (Leído 3,962 veces)
danny920825

Desconectado Desconectado

Mensajes: 175


Ver Perfil WWW
[Ayuda] Script de PHP no funciona igual que el phpmyadmin
« en: 7 Abril 2017, 19:28 pm »

Hola amigos. Ayer publique un tema relacionado con este, pero prefiero hacer uno aparte, porque la forma de hacerlo que propuse ayer, si funciona. Lo que sucede es que quiero restaurar una BD desde PHP.
Lo estaba haciendo desde la consola de mysql usando la funcion
Código
pero en la noche un amigo me dijo que si el phpmyadmin está hecho en PHP entonces debe existir una forma de hacerlo. Y me di a la tarea, lo primero fue limpiar el archivo .sql para quitarle los comentarios /* y --. El efecto fue usar
Código
para cargar todo el contenido, limpiarlo y luego llamar a la funcion que hace la restaura. En la funcion que hace la restaura lo que hago es dividir el string obtenido de la funcion anterior y delimitarlo por ; para generar la consulta.
El resultado es que la consulta me da error si la hago desde el script, pero si le pongo un
Código
  1. echo
para que me muestre el contenido y luego eso lo ejecuto desde el phpMyadmin sí se ejecuta. A continuacion ambas funciones, la de limpiar y la de restaurar:

Código
  1. function limpiar_sql($file)
  2. {
  3. include "bd.php";
  4. $file_sql = $salva_dir.$_POST['salva_sql'];
  5. $archivo = file($file_sql, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  6. $abrir = fopen($file_sql, "w");
  7. foreach ($archivo as $key)
  8. {
  9. $recorte = substr($key, 0,2);
  10. if ($recorte != "--")
  11. {
  12. if ($recorte != "/*")
  13. {
  14. fwrite($abrir, $key);
  15. }
  16. }
  17. }
  18. fclose($abrir);
  19. restaurar_bd($_POST['salva_sql']);
  20. }
  21.  
  22. function restaurar_bd($file)
  23. {
  24. include "bd.php";
  25. $file_sql = $salva_dir.$_POST['salva_sql'];
  26. $contenido = file_get_contents($file_sql);
  27. $explode  = explode(";", $contenido);
  28.  
  29. foreach ($explode as $key)
  30. {
  31. $newkey = $key.";";
  32. $mysqli->query($newkey) or die (mysqli_error($mysqli));
  33. }
  34.  
  35. }
  36.  

Ayuda Por favor


En línea

"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno
#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: [Ayuda] Script de PHP no funciona igual que el phpmyadmin
« Respuesta #1 en: 7 Abril 2017, 20:01 pm »

¿ Qué error te tira el query a la hora de ejecutarlo en PHP ?

Saludos


En línea

danny920825

Desconectado Desconectado

Mensajes: 175


Ver Perfil WWW
Re: [Ayuda] Script de PHP no funciona igual que el phpmyadmin
« Respuesta #2 en: 7 Abril 2017, 20:04 pm »

Perdón. Lo iba a poner y se me olvidó. Lo unico que dice es:
Query was empty
No da más ningun dato
« Última modificación: 7 Abril 2017, 20:21 pm por danny920825 » En línea

"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno
#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: [Ayuda] Script de PHP no funciona igual que el phpmyadmin
« Respuesta #3 en: 15 Abril 2017, 19:06 pm »

Podrías pegar tal cual lo que te devuelve esto:

Código
  1. function restaurar_bd($file)
  2. {
  3. include "bd.php";
  4. $file_sql = $salva_dir.$_POST['salva_sql'];
  5. $contenido = file_get_contents($file_sql);
  6. $explode  = explode(";", $contenido);
  7.  
  8.                die(var_dump($explode));
  9.  
  10. foreach ($explode as $key)
  11. {
  12. $newkey = $key.";";
  13. $mysqli->query($newkey) or die (mysqli_error($mysqli));
  14. }
  15.  
  16. }

Deduzco que le estas pasando una query mal formateada a mysqli.

Saludos
En línea

danny920825

Desconectado Desconectado

Mensajes: 175


Ver Perfil WWW
Re: [Ayuda] Script de PHP no funciona igual que el phpmyadmin
« Respuesta #4 en: 23 Abril 2017, 01:22 am »

Hola y gracias por responder aun despues de tanto tiempo. Resulta que logre hacer que funcionara de esta forma:
Código
  1. function limpiar_sql($file)
  2. {
  3. include "bd.php";
  4. $file_sql = $salva_dir.$_POST['salva_sql'];
  5. $archivo = file($file_sql, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  6. $abrir = fopen($file_sql, "w");
  7. foreach ($archivo as $key)
  8. {
  9. $recorte = substr($key, 0,2);
  10. if ($key[0].$key[1] != '--' && $key[0].$key[1] != '/*')
  11. {
  12. fwrite($abrir, $key);
  13. }
  14.  
  15. }
  16. fclose($abrir);
  17. restaurar_bd($_POST['salva_sql']);
  18. }
  19.  
  20. function restaurar_bd($file)
  21. {
  22. include "bd.php";
  23. $file_sql = $salva_dir.$_POST['salva_sql'];
  24. $contenido = file_get_contents($file_sql, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  25. $explode  = explode(";", $contenido);
  26. $cantidad = count($explode)-1;
  27. for($i=0; $i<$cantidad;$i++)
  28. {
  29. $newkey = $explode[$i].";";
  30. if ($mysqli->query($newkey))
  31. {
  32. echo "ejecutada consulta: ".$newkey."<br>";
  33. }
  34. else
  35. {
  36. echo "error en consulta: ".$newkey."<br>";
  37. }
  38.  
  39. }
  40.  
  41. }
  42.  

Pero me estuvo diciendo un amigo que puede llegar a ser un inconveniente cuando quitas las lineas de -- y de /* que genera el SQL porque son las vistas. Y que hacer el
Código:
explode
por ; puede generar errores si en los datos de la BD existe algun ;
Habria alguna otra forma de restaurar la BD desde PHP utilizando la extension de mysqli?
En línea

"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno
#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: [Ayuda] Script de PHP no funciona igual que el phpmyadmin
« Respuesta #5 en: 23 Abril 2017, 16:56 pm »

Puedes usar shell_exec() para invocar mysql-dump e importar los datos. Es una alternativa un poco sucia pero realmente usaras MySQL y por lo tanto solucionas muchos problemas como el uso de vistas, claves como USE y otras funcionalidades no soportadas por el driver.

Un ejemplo seria:

Código
  1. $user = 'root';
  2. $password = 'toor';
  3. $database ='mibasededatos';
  4. $sqlFile = './archivoSql.sql';
  5.  
  6. $status = shell_exec("mysql -u{$user} -p{$password} -D {$database} < {$sqlFile}");
  7. var_dump($status);

Claro que eso implica que tengas acceso a shell_exec lo cual en algunos casos puede ser considerado como una característica propensa a ataques.


También podrías probar con el multi_query -> http://php.net/manual/es/mysqli.multi-query.php

Pero ya te digo que no sera ni de lejos tan eficiente y completa como usar el propio mysql.

Saludos
En línea

danny920825

Desconectado Desconectado

Mensajes: 175


Ver Perfil WWW
Re: [Ayuda] Script de PHP no funciona igual que el phpmyadmin
« Respuesta #6 en: 24 Abril 2017, 13:22 pm »

Ok, entonces utilizaré MySql directo con esta funcion:
Código
  1. function restaurar_bd($salva)
  2. {
  3. include "bd.php";
  4. $file_sql = $salva_dir.$_POST['salva_sql'];
  5. $mysql = "..\..\mysql\bin\mysql";
  6. $restaura = $mysql." -u $username --password=$password $bd < $file_sql";
  7. echo $restaura;
  8. echo "<br>";
  9. system($restaura, $salida);
  10. if ($salida == 0)
  11. {
  12. echo "Salva Realizada";
  13. }
  14. else
  15. {
  16. echo "No se pudo salvar la BD";
  17. }
  18. }
  19.  

Y me disculpo por mi costumbre de incluir las $variables dentro de las comillas dobles, ya que PHP las reconoce y agilizo el proceso. No se si es o no una mala practica.
En línea

"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines