Ejecutar archivo .sql desde php

publicado por: Anonymous

Tengo que realizar un programa en php que ejecute dos archivos .sql, ambos crearán una tabla dentro de mi base de datos ‘formadepagos’. Los archivos .sql ya los tengo, sólo tengo que hacer el programa en php.

Este es el archivo sql:

-- MySQL dump 10.13  Distrib 5.7.12, for Win32 (AMD64)
--
-- Host: 158.69.25.165    Database: nexumApp
-- ------------------------------------------------------
-- Server version   5.7.16-0ubuntu0.16.04.1

/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @[email protected]@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS,             FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `formasPago`
--

DROP TABLE IF EXISTS `formasPago`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `formasPago` (
`idFormaPago` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(255) NOT NULL,
`estatus` int(11) NOT NULL,
PRIMARY KEY (`idFormaPago`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `formasPago`
--

LOCK TABLES `formasPago` WRITE;
/*!40000 ALTER TABLE `formasPago` DISABLE KEYS */;
INSERT INTO `formasPago` VALUES (1,'Nexum Energy Card',1),(2,'GasoPass',1),        (3,'Sodexo',1),(4,'Energex',1),(5,'Visa',1),(6,'Efectivale',1),(7,'UltraGas',1),(8,'Edenred',1),(9,'Visa Electron',1),(10,'Sodexo',1),(11,'Accor',1),(12,'Ticket Car',1),(13,'Mastercard',1),(14,'Credigas',1),(15,'Inbursa',1),(16,'Credigas',1),(17,'American Express',1),(18,'Vale Gasored',1),(19,'PowerGas',1);
/*!40000 ALTER TABLE `formasPago` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Dumping routines for database 'nexumApp'
--
/*!40103 SET [email protected]_TIME_ZONE */;

/*!40101 SET [email protected]_SQL_MODE */;
/*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */;
/*!40014 SET [email protected]_UNIQUE_CHECKS */;
/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_COLLATION_CONNECTION */;
/*!40111 SET [email protected]_SQL_NOTES */;

-- Dump completed on 2017-02-27 16:28:00

solución

Yo leería línea a línea el fichero sql e iría insertando las sentencias una vez completadas.

// Aquí tendrás que poner tus datos de conexión a la base de datos y la tabla en cuestión.
$conx = mysqli_connect("127.0.0.1", "mi_usuario", "mi_contraseña", "mi_bd") or die('Error al conectar');

$fichero = 'formadepagos.sql';  // Ruta al fichero que vas a cargar.

// Linea donde vamos montando la sentencia actual
$temp = '';

// Flag para controlar los comentarios multi-linea
$comentario_multilinea = false;

// Leemos el fichero SQL al completo
$lineas = file($fichero);

// Procesamos el fichero linea a linea
foreach ($lineas as $linea) {

    $linea = trim($linea); // Quitamos espacios/tabuladores por delante y por detrás

    // Si es una linea en blanco o tiene un comentario nos la saltamos
    if ( (substr($linea, 0, 2) == '--') or (substr($linea, 0, 1) == '#') or ($linea == '') )
        continue;

    // Saltamos los comentarios multilinea /* texto */ Se detecta cuando empiezan y cuando acaban mediante estos dos ifs  
    if ( substr($linea, 0, 2) == '/*' ) $comentario_multilinea = true;

    if ( $comentario_multilinea ) {
       if ( (substr($linea, -2, 2) == '*/') or (substr($linea, -3, 3) == '*/;') ) $comentario_multilinea = false;
       continue;
    }

    // Añadimos la linea actual a la sentencia en la que estamos trabajando 
    $temp .= $linea;

    // Si la linea acaba en ; hemos encontrado el final de la sentencia
    if (substr($linea, -1, 1) == ';') {
        // Ejecutamos la consulta
        mysqli_query($conx, $temp) or print('<strong>Error en la consulta</strong> '' . $temp . '' - ' . mysqli_error($conx) . "<br /><br />n");
        // Limpiamos sentencia temporal
        $temp = '';
    }
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *