A ver si lo aclaramos:
Using perl Syntax Highlighting
my $eventos = $rs->fetchall_arrayref();Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
devuelve la estructura que te comenté antes: una referencia a un array de arrays. Así, para sacar el tercer campo del quinto registro, es
Using perl Syntax Highlighting
print $eventos->[4
]->[2
];Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Si solo nos interesa el primer campo de todos los registros:
Using perl Syntax Highlighting
my $eventos = $rs->fetchall_arrayref([0
]);Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Si solo nos interesa los dos últimos campos:
Using perl Syntax Highlighting
my $eventos = $rs->fetchall_arrayref([-2
,-1
]);Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Otra cosa distinta es lo que comentas:
Using perl Syntax Highlighting
my $eventos = $rs->fetchall_arrayref({});Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
La presencia del hash anónimo (
{}) provoca que el resultado sea una referencia a un array en que cada elemento es un hash anónimo en que las claves son los nombres de los campos. Así, para sacar el Nombre del registro número 2341 es:
Using perl Syntax Highlighting
print $eventos->[2341
]->{Nombre
};Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Si solo nos interesan los campos de Nombre y Apellidos, entonces lo llamamos así:
Using perl Syntax Highlighting
my $eventos = $rs->fetchall_arrayref({Nombre
=> 1
, Apellidos
=> 1
});Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Pero en estos casos en los que solo nos interesan ciertos campos, es mucho mejor rehacer la consulta SQL para que nos devuelva los campos interesantes, y luego hacer el fetchall, sin restricciones.
Si, una vez que tienes toda la información sacada con el fetchall, quieres obtener, en una variable separada, todos los nombres, entonces depende de la estructura que le pediste a fetchall. Así, si usaste la forma
fetchall_arrayref();, entonces debemos saber qué posición ocupa el campo Nombre dentro de la consulta. Si suponemos que es el primer campo, entonces con
Using perl Syntax Highlighting
foreach my $evento ( @$eventos ) {
push @nombres, $evento->[0
];
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Si, en cambio, usamos
fetchall_arrayref({});, entonces será
Using perl Syntax Highlighting
foreach my $evento ( @$eventos ) {
push @nombres, $evento->{Nombre
};
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Una vez que tienes todos los @nombres, puedes meterlos todos en un único escalar, con join:
Using perl Syntax Highlighting
$nombres = join(" ", @nombres);Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Y en cuanto al HTML::Template, hay módulos como el
HTML::Template::Associate, que ayudan mucho en la presentación de datos de una consulta en una plantilla HTML. De hecho, se hace todo en unas pocas líneas.
Using perl Syntax Highlighting
use DBI
;
use HTML
::Template;
use HTML
::Template::Associate;
my $results_foo = $dbh->selectall_hashref (
'SELECT foo FROM bar WHERE baz = ?',
'foo_id',
{},
$baz
);
my $associate = HTML
::Template::Associate->new( {
target
=> 'DBI',
create
=> [ {
results
=> $results_foo,
name
=> 'my_loop',
type
=> 'selectall_hashref'
},
]
} );
my $template = HTML
::Template->new (
filename
=> 'test.tmpl',
associate
=> [ $associate ],
die_on_bad_params
=> 0
);
print $template->output();
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4