Dom Ago 27, 2006 7:24 am
|
 |
AkonD
Perlero Nuevo

|
Registrado: 06 Oct 2005
Mensajes: 50
Ubicación: España
|
|
| Problemas con consulta MySQL |
|
|
Wenas perleros ^^
Tngo un problemilla con una funcion de mi cgi i no consigo enteder pq no funciona.
| Código: |
sub perljax_mi_perfil {
my ($dbname,$dbhost,$dbuser,$dbpass,$dbtable) = ($conf->{db_name},$conf->{db_host},$conf->{db_user},$conf->{db_pass}, $conf->{db_table});
my $dbh = DBI->connect("DBI:mysql:$dbname:$dbhost", "$dbuser", "$dbpass") or die "Imposible conectar con la DB";
my $sth = $dbh->prepare("SELECT * FROM $dbtable WHERE nick = '$nick'") or die "Imposible preparar la consulta";
$sth->execute() or die "Imposible ejecutar la consulta";
my $datos_perfil = $sth->fetchall_arrayref({}) || undef;
$sth->finish;
$dbh->disconnect;
my $return;
my $file = $conf->{template_path};
if (defined($datos_perfil)) {
$file .= "mi_perfil.tmpl";
my $template = new HTML::Template( filename =>$file );
$template->param(ROWS => $datos_perfil);
$return = $template->output();
}
else {
$file .= "formulario_crear_perfil.tmpl";
my $template = new HTML::Template( filename =>$file );
$return = $template->output();
}
return $return;
}
|
El problema esta en el if i else, si no existe la entrada en la tabla mysql deberia printar el template formulario_crear_perfil.tmpl y si existe deberia printar el template mi_perfil.tmpl
Nose pq siempre se keda en el bloke del IF nunca pasa al else
salu2 |
|
|
|

Dom Ago 27, 2006 9:14 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
|
|
|
|
|
| Cita: | fetchall_arrayref:
If there are no rows to return, fetchall_arrayref returns a reference to an empty array. |
Es porque fetchall_arrayref, en caso de no encontrar filas que devolver, devuelve una referencia a una array vacío, que es un valor no nulo.
Puedes comprobarlo tu mismo:
| Código: |
| perl -le '$x = []; $y = $x || undef; print defined $y' # 1 |
Yo cambiaría el if por un test del número de elementos contenidos en $datos_perfil. Algo así:
| Código: |
my $datos_perfil = $sth->fetchall_arrayref({});
#...
if ( @$datos_perfil ) { |
|
|
Dom Ago 27, 2006 2:03 pm
|
 |
AkonD
Perlero Nuevo

|
Registrado: 06 Oct 2005
Mensajes: 50
Ubicación: España
|
|
|
|
|
Gracias  |
|
Powered by phpBB © 2001, 2005 phpBB Group
|