Lo mejor es ir al manual de DBI, y quizás empezar por la sección "Outline Usage":
http://search.cpan.org/~timb/DBI-1.56/D ... line_UsagePero, aparte del Tutorial incluido en este foro (
Cómo conectarte a tu database), las reglas básicas son:
Using perl Syntax Highlighting
use DBI
;
use strict
;
# Conexión
# Parámetros:
# $dsn contiene la descripción del tipo y driver a usar con la base de datos, así como su posible localización
# $user contiene el nombre del usuario con el que nos conectamos a ella
# $password contiene la contraseña de ese usuario
# El resto de opciones, son eso, opcionales. Consultar el manual para ver su significado.
# Salida:
# $dbh almacenará el manipulador con la base de datos
my $dbh = = DBI
->connect($dsn, $user, $password, { RaiseError
=> 1
, AutoCommit
=> 0
})
or die "ERROR en la conexión con la base de datos $dsn: $DBI::errstr";
# Preparación de la sentencia SQL
my $sql = 'SELECT * FROM opiniones';
my $sth = $dbh->prepare( $sql );
# Ejecución
$sth->execute();
# Obtención de los datos
while ( my @row = $sth->fetchrow_array ) {
print "@row\n";
}
# Desconexión
$dbh->disconnect();Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Aquí se elige la forma normal de recuperación: usar fetchrow_array que recupera una sola de las filas de la tabla de resultados y la devuelve como una lista de valores, que la almacenamos en la variable @row.
Hay otras formas de recuperación: en un hash por filas, todo el resultado en una referencia a un array en que cada elemento es un array con los valores de cada fila (selectall_arrayref), lo mismo pero con hashes, etc. etc.
El manual indica que la forma de obtención más rápida es la siguiente: usar fetchrow_arrayref() con el uso además de bind_columns(). Ejemplo:
Using perl Syntax Highlighting
$sth->prepare( 'SELECT usuario,imagen,direccion FROM direcciones WHERE usuario=?' );
$sth->execute( 'Miguel' );
my ($usuario,$imagen,$direccion);
$sth->bind_columns( \$usuario, \$imagen, \$direccion); # que es lo mismo que poner bind_columns(\($usuario,$imagen,$direccion))
while ( $sth->fetch ) { # fecth() es un alias de fetchrow_arrayref()
print "El usuario $usuario vive en $direccion.\n";
print "Su imagen está en $imagen.\n";
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Como vemos, el acceso a los campos es muy visual gracias a la ayuda de bind_columns(). Si no fuera por ella, tendríamos que recuperar los datos de esta manera:
Using perl Syntax Highlighting
while ( $fila_ref = $sth->fetchrow_arrayrey() ) {
print "El usuario $fila_ref->[0] vive en $fila_ref->[2].\n";
print "Su imagen está en $fila_ref->[1].\n";
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
$fila_ref es una referencia a un array (que es lo que nos devuelve la función fetchrow_arrayref) por lo que debemos usar la 'indirección' (->) y luego, como es un array, accedemos a los campos de la fila por medio de sus índices. Sabemos el orden de los campos porque se los hemos puesto en el SELECT.
Hay más formas de obtener los datos, pero darían para explicarlo tanto como un libro (que ya está escrito, por cierto).
Otra gente más moderna prefiere usar otros módulos de la familia
DBIx::Class, como por ejemplo
DBIx::Simple, o
DBIx::Easy.