• Publicidad

Problema con una consulta SQL

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problema con una consulta SQL

Notapor angelltroa » 2010-04-30 13:26 @601

Hola a todos,

Estoy atascado en un problema muy simple pero no consigo solucionarlo. El caso es que estoy intentando hacer una select y no me devuelve ningún resultado. Me he asegurado que la select está bien probándola anteriormente en la BBDD.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use warnings;
  3. use diagnostics;
  4. use DBI;
  5. use ConnectDB;
  6.  
  7.  
  8. my $ip=99.999.999.99;
  9.        
  10. my($dbh,$sth);
  11. $dbh = ConnectDB->connect();
  12.  
  13. $sth = $dbh->prepare('SELECT attemps FROM blacklist WHERE ip = ?') or die("Couldn't prepare statement: " . $dbh->errstr);
  14. $sth->execute($ip) or die("Couldn't execute statement: " . $sth->errstr);
  15.  
  16. my $res = $sth->fetchrow_array();
  17. if ($res){
  18.      print "$res";
  19. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El caso es que si pongo la variable $res con el if() la ejecución no pinta nada, o sea, la variable esta vacía. Si el código lo pongo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $res = $sth->fetchrow_array();
  2. print "$res";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
me dice que
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Use of uninitialized value $fecha in concatenation (.) or string at
        ./intents.pl line 23 (#1)
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Se que es una tontería pero no consigo ver el fallo. Aquí esta la prueba de que la select funciona:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
mysql> SELECT attemps FROM blacklist WHERE ip = "99.999.999.99";
+---------+
| attemps |
+---------+
|       8 |
+---------+
1 row in set (0.00 sec)
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¡¡ Muchas gracias por vuestra atención !!

¡ Saludos !
Última edición por explorer el 2010-04-30 16:01 @709, editado 1 vez en total
Razón: Tildes
angelltroa
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2010-04-14 06:11 @299

Publicidad

Re: Problema con una consulta SQL

Notapor explorer » 2010-04-30 16:04 @711

Cambia la línea 8 a esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $ip = '99.999.999.99';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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

Re: Problema con una consulta SQL

Notapor angelltroa » 2010-05-01 05:48 @283

Así sí que me funciona, pero de hecho hay una cosa que no acabo de entender en absoluto. Este código lo tengo en una función, si hago un UPDATE me coge perfectamente la IP, en cambio con esta SELECT, no. No lo entiendo... ahora siempre me devuelve que el valor de la consulta es una, y esto es falso
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub is_in{

        my $ip=shift;
        my @intents;

        my($dbh,$sth);
        $dbh = ConnectDB->connect();
       
        $sth = $dbh->prepare('UPDATE blacklist SET attemps = attemps + 1 WHERE ip = ?') or die("Couldn't prepare statement: " . $dbh->errstr);
        my @resultat= $sth->execute($ip) or die("Couldn't execute statement: " . $sth->errstr);

#=== PROBLEMA  
        # Si se produce el Update la ip ya estaba, entonces miramos numero de repeticiones
        if ($resultat[0] == "1"){
                $sth = $dbh->prepare('SELECT attemps from blacklist WHERE ip = ?') or die("Couldn't prepare statement: " . $dbh->errstr);
                @intents = $sth->execute($ip) or die("Couldn't execute statement: " . $sth->errstr);
                print "INTENTOS: @intents\n";   #siempre devuelve 1
               
        }
#=== FIN PROBLEMA        
        #La ip no estaba, la registramos
        else{
                my $sth = $dbh->prepare('INSERT INTO blacklist (ip,attemps) values (? , 1)') or die("Couldn't prepare statement: " . $dbh->errstr);
                my @resultat= $sth->execute($ip) or die("Couldn't execute statement: " . $sth->errstr);
        }
        $sth->finish;
        $dbh->disconnect;
        return ($intents[0]);
}
 
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¡¡ Gracias de nuevo !!
angelltroa
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2010-04-14 06:11 @299

Re: Problema con una consulta SQL

Notapor explorer » 2010-05-01 07:12 @341

El valor que devuelve execute() es el resultado del ÉXITO de la operación, no el contenido que quieres extraer con la SELECT.

Debes usar alguna función fetch() para obtener ese valor.

O usar una función como selectrow_array() que hace todos los pasos, en uno.
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


Volver a Básico

¿Quién está conectado?

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