Ejecutar archivos MySQL *.sql en PHP

Resuelto Sonny asked hace 54 años • 15 respuestas

Tengo dos *.sqlarchivos que uso al crear una nueva base de datos de un sitio web. El primer archivo crea todas las tablas. El segundo archivo completa algunos registros predeterminados. Me gustaría ejecutar estos archivos desde PHP. También uso Zend_Framework, si eso ayuda a lograrlo.

Información adicional

  1. No tengo acceso a la consola
  2. Estoy intentando automatizar la generación de sitios desde nuestra aplicación.

SOLUCIÓN

Usando shell_exec()...

$command = 'mysql'
        . ' --host=' . $vals['db_host']
        . ' --user=' . $vals['db_user']
        . ' --password=' . $vals['db_pass']
        . ' --database=' . $vals['db_name']
        . ' --execute="SOURCE ' . $script_path
;
$output1 = shell_exec($command . '/site_db.sql"');
$output2 = shell_exec($command . '/site_structure.sql"');

...Nunca obtuve resultados útiles, pero seguí algunas sugerencias en otro hilo y finalmente lo hice funcionar. Cambio al --option=valueformato para los comandos y lo uso --execute="SOURCE ..."en lugar de <para ejecutar el archivo.

Además, nunca obtuve una buena explicación de la diferencia entre shell_exec()y exec().

Sonny avatar Jan 01 '70 08:01 Sonny
Aceptado

Esta pregunta surge de vez en cuando. No existe una buena solución para ejecutar un script .sql directamente desde PHP. Hay casos extremos en los que las declaraciones comunes en un script .sql no se pueden ejecutar como declaraciones SQL. Por ejemplo, la herramienta mysql tiene comandos integrados que no son reconocidos por el servidor MySQL, por ejemplo CONNECT, TEE, STATUSy DELIMITER.

Entonces le doy +1 a la respuesta de @Ignacio Vazquez-Abrams . Debes ejecutar tu script .sql en PHP invocando la mysqlherramienta, por ejemplo con shell_exec().


Conseguí que esta prueba funcionara:

$command = "mysql --user={$vals['db_user']} --password='{$vals['db_pass']}' "
 . "-h {$vals['db_host']} -D {$vals['db_name']} < {$script_path}";

$output = shell_exec($command . '/shellexec.sql');

Vea también mis respuestas a estas preguntas relacionadas:

  • Cargando archivos .sql desde PHP
  • ¿Es posible llamar a un script SQL desde un procedimiento almacenado en otro script SQL?
  • PHP: múltiples consultas SQL en una declaración mysql_query
Bill Karwin avatar Oct 26 '2010 21:10 Bill Karwin
$commands = file_get_contents($location);   
$this->_connection->multi_query($commands);
Farid Movsumov avatar Apr 19 '2013 12:04 Farid Movsumov

Necesitará crear un analizador SQL completo para esto. Le recomiendo que utilice la mysqlherramienta de línea de comandos para esto, invocándola externamente desde PHP.

Ignacio Vazquez-Abrams avatar Oct 26 '2010 20:10 Ignacio Vazquez-Abrams