• Publicidad

Uso del undef

¿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.

Uso del undef

Notapor Lor » 2007-04-28 09:13 @425

Agradecería si me pudiesen indicar si el uso del undef es correcto en el siguiente caso:

Hago una consulta a una tabla MySql, obteniendo del select los siguientes campos: id_login, nombre, etc......

¿Es correcto preguntar así?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    if ($id_login eq undef){
        print " vacio, no se encontro lo consulatdo "
    }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El script me lo esta tomando, cosa que no sucede si hago el if siguiente

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if (undef $id_login) {

}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Por qué? ¿Cuál es la forma correcta de preguntar si el select pudo o no obtener algún registro como resultado?

Muchas gracias.
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Publicidad

Notapor explorer » 2007-04-28 12:30 @562

No, no sería 'correcto'.

undef es una función que "indefine" la expresión que le sigue o, si no se pone ninguna, simplemente devuelve el valor 'undefined' (no definido).

Para preguntar por la definición de un valor, se suele usar la función defined():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ( defined $id_login ) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

En el trabajo normal con select a una base de datos, como lo normal es recibir como resultado una tabla de datos, lo que se suele hacer es comprobar cuántas filas son esa tabla (con el método rows del DBI). Si es 0, entonces es que no hay resultados. El problema es que no todos los drivers de base de datos devuelven el número de filas afectadas por la query, si no que simplemente te van devolviendo filas a medida que se lo solicitas, por lo que es recomendable hacer una consulta previa para saber cuántas son. Consulta la documentación de rows en DBI.

Yo casi siempre no me preocupo de ver cuántas filas son: hago la consulta e inmediatamente recupero el resultado con alguna de las funciones fetch*. Si, luego, hago un bucle recorriendo esa estructura devuelta y no hay nada, es que no hubo respuesta de la base de datos a la consulta.

En tu caso, como sólo quieres recuperar un dato de la base de datos, es lógico ver si la variable está definida (hemos recibido el dato) o no.
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 Lor » 2007-04-28 15:30 @687

Explorer. muchas gracias. Como siempre muy claro.
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282


Volver a Intermedio

¿Quién está conectado?

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

cron