Igual que los manejadores de base de datos se crean desde el DBI, los manejadores de sentencia son hijos de un manejador de base de datos. Como su propio nombre implica, los manejadores de sentencia se utilizan para sentencias individuales tales como SELECT, INSERT, UPDATE, DELETE, etc., para ejecutarse en el servidor de base de datos. Se pueden definir múltiples manejadores de sentencia (y normalmente se hace) basándose en un manejador de base de datos dentro de un programa dado.
Los manejadores de sentencia se crean por sentencias. Esto significa que si tiene múltiples sentencias a ejecutar contra un manejador de base de datos dado, necesitará múltiples manejadores de sentencia. Sin embargo, puede reutilizar un manejador de sentencia si la sentencia se tiene que volver a ejecutar contra una base de datos. De hecho, puede utilizar parámetros para ejecutar la misma sentencia pero con diferentes valores, como se explica más adelante en este capítulo.
Los manejadores de sentencia no son siempre necesarios para enviar sentencias a la base de datos. Los manejadores de sentencia son necesarios cuando necesita recuperar o ir a buscar información de la base de datos. Sin embargo, las sentencias también se pueden ejecutar directamente contra la base de datos por medio del método do() del manejador de base de datos, según se explica más adelante en este capítulo.
Como se ha indicado anteriormente, se crea un manejador de sentencia desde el manejador de base de datos. En términos prácticos, esto significa que crea una variable, comúnmente denominada $sth para albergar el objeto de manejador de sentencia. El método prepare() de la variable del manejador de sentencia se invoca en el manejador de base de datos. Aquí tiene un ejemplo:
my $sth = $dbh->prepare("SELECT user, host FROM mysql.user");
Por sí mismo, el manejador de sentencia creado en el ejemplo de código puede no hacer nada. Para algunos tipos de base de datos, incluido MySQL la interacción con la base de datos todavía no ha tendio lugar. En su lugar, el DBI solamente ha preparado la sentencia para ejecutarse más adelante.
Esta llamada del método prepare() se utiliza para activar la parametrización de la sentencia antes de ejecutar la sentencia más adelante. La sentencia no se ejecutará contra la base de datos hasta que se invoque el método execute() en el manejador de sentencia, $sth:
$sth->execute();
En este punto, la sentencia, en este caso, una sentencia SELECT, se ha ejecutado contra la base de datos aunque no se ha recuperado níngún resultado.
Nota: Algunas bases de datos analizarán la sentencia cuando invoque prepare() y de esta manera puede devolver errores si el servidor encuentra problemas mientras trata de analizar la sentencia SQL dada en el método prepare(). Consulte la documentación para el driver de base de datos para determinar si las sentencias se analizan en el momento de invocar prepare().
No hay comentarios:
Publicar un comentario