mysqli_multi_query. Consultas múltiples con PHP y MySQL

mysqli_multi_queryHola, hoy vamos a explicaros como realizar inserciones múltiples con PHP y MySQL. Para ello usaremos mysqli_multi_query. Esta función de PHP permite la ejecución de una o varias consultas MySQL. Estas consultas pueden ser de tipo INSERT, SELECT, UPDATE, etc.

Podremos combinarlas entre sí, o usar consultas de un solo tipo. Pero hay que tener en cuenta que para que funcione, siempre deben acabar las consultas en «;» (sin comillas). Una vez explicado, veamos en qué casos puede ser útil.

¿En qué situaciones puede servirnos mysqli_multi_query?

Esta función la podemos usar en todos los casos en los que sea necesario interactuar con la base de datos. Por ejemplo, realizar la inserción de un formulario a varias tablas. También podríamos usarlo para cargar los datos de un dashboard con diferentes orígenes. Las posibilidades son muchas, ya que puede ejecutar una o varias consultas divididas por «;». Veamos varios ejemplos.

Ejemplo de inserción múltiple

Un ejemplo típico es la inserción de un formulario de registro. Supongamos que tenemos la tabla «users» y la tabla «user_preferences«. En la primera se almacenan los datos del usuario. Estos datos pueden ser email, nombre, apellidos, etc. En la segunda tendríamos los intereses del usuario registrado. De esta forma podríamos gestionar una newsletter con el envío de email sólo a los usuarios interesados. Para ello necesitamos realizar dos operaciones INSERT y tenemos un solo formulario, ¿cómo lo hacemos? con la ayuda de mysqli_multi_query.

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
//insertamos los datos de usuario en la tabla users
$sql = "INSERT INTO users (firstname, lastname, email)
VALUES ('Antonio', 'Hidalgo', 'ahidalgo@dominio.com');";
//insertamos los intereses del usuario en la tabla user_preferences 
$sql .= "INSERT INTO user_preferences (email, interest)
VALUES ('ahidalgo@dominio.com', 'technology');";
$sql .= "INSERT INTO user_preferences (email, interest)
VALUES ('ahidalgo@dominio.com', 'sports');";
$sql .= "INSERT INTO user_preferences (email, interest)
VALUES ('ahidalgo@dominio.com', 'books');";
$sql .= "INSERT INTO user_preferences (email, interest)
VALUES ('ahidalgo@dominio.com', 'events');";

if (mysqli_multi_query($conn, $sql)) {
    echo "New records created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?>

Ejemplo de SELECT múltiple

Una vez que se ha registrado el usuario, podríamos mostrar los intereses junto con sus datos personales. Para ello necesitaríamos hacer una SELECT a cada tabla y mostrarlo por pantalla.

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
$email = $_POST['email'];
$query  = "SELECT email from users where email = " . $email . ";";
$query .= "SELECT interest FROM user_preferences WHERE email=". $email . ";";

/* ejecutar multi consulta */
if (mysqli_multi_query($conn, $query)) {
    do {
        /* almacenar resultado de la primera consulta */
        if ($result = mysqli_store_result($conn)) {
            while ($row = mysqli_fetch_row($result)) {
                printf("%s\n", $row[0]);
            }
            mysqli_free_result($result);
        }
        /* mostrar divisor */
        if (mysqli_more_results($conn)) {
            printf("-----------------\n");
        }
    } while (mysqli_next_result($conn));
}

/* cerrar conexión */
mysqli_close($conn);
?>

Estos son solo unos ejemplos, pero las posibilidades son muy amplias. En sus últimas versiones MySQL además ha añadido la posibilidad de trabajar nativamente con datos JSON, descubre cómo aquí.

Esperamos que este artículo os haya servido. Si no quieres perderte artículos como éste y del mundo de las bases de datos, Open Source y Linux, regístrate a nuestra newsletter. Con un solo email al mes, estarás al día de nuestras publicaciones.


Nos vemos en próximas entradas,

Equipo de base de datos

Fuentes:

https://secure.php.net/manual/es/mysqli.multi-query.php

https://www.w3schools.com/php7/php7_mysql_insert_multiple.asp