1 min. de lectura (aproximado)

Ejecutar varias queries con mysqli

En ocasiones se necesita ejecutar varias sentencias SQL de forma consecutiva, por ejemplo, un "INSERT" seguido de un "UPDATE" y luego un "SELECT". MySQLi ofrece la función "multi_query()", o mysqli_multi_query()" en estilo procedimental, que permite enviar varias consultas en una sola llamada al servidor, separadas por punto y coma.
Esto puede reducir la latencia de red al evitar múltiples accesos a MySQL.

Sintaxis básica

Estilo orientado a objetos

$mysqli->multi_query("QUERY1; QUERY2; QUERY3");

Estilo procedimental

mysqli_multi_query($conexion, "QUERY1; QUERY2; QUERY3");

Ejemplo completo y funcional

$mysqli = new mysqli("localhost", "usuario", "password", "basedatos");

if ($mysqli->connect_error) {
    die("Error de conexión: " . $mysqli->connect_error);
}

// Varias consultas separadas por ;
$sql = "
    INSERT INTO usuarios (nombre, email) VALUES ('Juan Pérez', 'juan@email.com');
    UPDATE contador SET visitas = visitas + 1 WHERE id = 1;
    SELECT * FROM usuarios ORDER BY id DESC LIMIT 5;
";

if ($mysqli->multi_query($sql)) {
    do {
        // Almacenar el primer result set
        if ($resultado = $mysqli->store_result()) {
            // Procesar los resultados (solo si la consulta devuelve datos)
            while ($fila = $resultado->fetch_assoc()) {
                echo $fila['nombre'] . " - " . $fila['email'] . "
"; } $resultado->free(); } // Comprobar si hay más resultados if (!$mysqli->more_results()) { break; } } while ($mysqli->next_result()); } else { echo "Error en multi_query: " . $mysqli->error; } $mysqli->close(); /code>