Ejecución de múltiples sentencias SQL con PHP y MySQL

El uso de MySQL desde PHP ha estado tradicionalmente limitado al uso de una única sentencia SQL por cada llamada a la base de datos. Esto es una limitación de la función mysql_query pero también es una medida de seguridad para prevenir por ejemplo la inyección de sentencias SQL. Sin embargo hay ocasiones en las que es conveniente poder disponer de la opción de poder ejecutar múltiples sentencias en un solo paso, por ejemplo en scripts de administración para realizar cambios en la base de datos. Esto es posible actualmente utilizando la extensión mejorada mysqli.

La extensión mysqli, llamada extensión de MySQL mejorada, permite aprovechar las funcionalidades más recientes de MySQL y viene incluida en todas las versiones de PHP 5. Esta extensión dispone de la función multi_query que permite ejecutar múltiples sentencias SQL con una única llamada, separando cada sentencia con un «;».

El ejemplo siguiente muestra de forma resumida cómo puede utilizarse esta función para ejecutar un conjunto de sentencias SQL obtenidas desde un archivo. Lo único que hay que tener en cuenta es que tras realizar la llamada es necesario recorrer cada resultado asociado a las sentencias, en caso contrario nos encontraremos con errores de mysql si intentamos realizar nuevas llamadas desde la misma conexión.

$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
 
$sqls = file_get_contents('ddbb_update.sql');
 
if ($mysqli->multi_query($sqls)) {
    do {
        if ($result = $mysqli->store_result()) {
            $result->free();
        }
    } while ($mysqli->next_result());
}
 
$mysqli->close();
Twitter Digg Delicious Stumbleupon Technorati Facebook Email

Los comentarios están cerrados.