Importar un script SQL mediante programación puede ser la mar de útil si necesitamos crear una estructura de base de datos dinámica. Por ejemplo, si hemos desarrollado una app o un plugin el cual se tiene que descargar e instalar online, el hecho de importar un script SQL de manera dinámica puede servirnos para configurar la base de datos de cara a un funcionamiento óptimo de la app o del plugin.
En este tutorial, vamos a importar un archivo SQL a una base de datos utilizando PHP. En este ejemplo, contaremos con un script SQL para crear una tabla de contactos e insertar datos. El código PHP analiza el archivo lÃnea por lÃnea y extrae las instrucciones a ejecutar utilizando la función MySQL de PHP.
Código PHP para importar un script SQL
Utilizaremos este código de PHP para importar archivos SQL a una base de datos. Para ello extraeremos el contenido del archivo en un array compuesto de lÃneas mediante la función de PHP file(). Recorreremos las lÃneas del array en un bucle foreach para construir la consulta omitiendo comentarios y lÃneas vacÃas.
La condición comprueba si la lÃnea contiene sÃmbolos utilizados como delimitadores de comentarios como (-, / *, //). Si es asÃ, el bucle se salta el registro actual y continúa con el siguiente. De esta manera, repite lo mismo hasta la declaración 'final de consulta'. Una vez que se encuentra el final, se ejecutará la consulta. Después, la variable query se restablecerá antes de comenzar la próxima iteración
<?php $conn =new mysqli('localhost', 'root', '' , 'blog_samples'); $query = ''; $sqlScript = file('database-script.sql'); foreach ($sqlScript as $line) { $startWith = substr(trim($line), 0 ,2); $endWith = substr(trim($line), -1 ,1); if (empty($line) || $startWith == '--' || $startWith == '/*' || $startWith == '//') { continue; } $query = $query . $line; if ($endWith == ';') { mysqli_query($conn,$query) or die('<div class="error-response sql-import-response">Problem in executing the SQL query <b>' . $query. '</b></div>'); $query= ''; } } echo '<div class="success-response sql-import-response">SQL file imported successfully</div>'; ?>