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>