• Publicidad

Problemas con consulta MySQL

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Problemas con consulta MySQL

Notapor AkonD » 2006-08-27 08:24 @392

Wenas perleros ^^

Tngo un problemilla con una funcion de mi cgi i no consigo enteder pq no funciona.

Código: Seleccionar todo
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
AkonD
Perlero nuevo
Perlero nuevo
 
Mensajes: 50
Registrado: 2005-10-06 06:36 @316
Ubicación: España

Publicidad

Notapor explorer » 2006-08-27 10:14 @468

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: Seleccionar todo
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: Seleccionar todo
my $datos_perfil = $sth->fetchall_arrayref({});
#...
if ( @$datos_perfil ) {
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor AkonD » 2006-08-27 15:03 @669

Gracias :)
AkonD
Perlero nuevo
Perlero nuevo
 
Mensajes: 50
Registrado: 2005-10-06 06:36 @316
Ubicación: España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron