Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Problemas con consulta MySQL

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Dom Ago 27, 2006 7:24 am
AkonD
Perlero Nuevo
Perlero Nuevo
Registrado: 06 Oct 2005
Mensajes: 50
Ubicación: España
Problemas con consulta MySQL Responder citando

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
Mensaje Dom Ago 27, 2006 9:14 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
Responder citando

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 ) {
Mensaje Dom Ago 27, 2006 2:03 pm
AkonD
Perlero Nuevo
Perlero Nuevo
Registrado: 06 Oct 2005
Mensajes: 50
Ubicación: España
Responder citando

Gracias Smile
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group