Ejecutar archivos MySQL *.sql en PHP
Tengo dos *.sql
archivos 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
- No tengo acceso a la consola
- 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=value
formato 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()
.
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
, STATUS
y DELIMITER
.
Entonces le doy +1 a la respuesta de @Ignacio Vazquez-Abrams . Debes ejecutar tu script .sql en PHP invocando la mysql
herramienta, 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
$commands = file_get_contents($location);
$this->_connection->multi_query($commands);
Necesitará crear un analizador SQL completo para esto. Le recomiendo que utilice la mysql
herramienta de línea de comandos para esto, invocándola externamente desde PHP.