Pregunta

Me postulo una consulta 'describir la tabla' y devuelve el valor 'nulo' para la columna 'por defecto'. Sin embargo, cuando intento imprimir el valor de la base de datos para una tabla HTML no se esté imprimiendo 'nulo'. Es simplemente siempre está en blanco.

Esta es la forma en que estoy almacenando los datos de la base de datos:

@nulls = ();

while (($null) = $sth1->fetchrow_array)
    {
    push (@nulls, $null);
    }

Al imprimir el contenido de la matriz @nulls nunca imprime el valor literal de 'nulo'. Siempre está en blanco. ¿Hay una manera de superar este problema?

¿Fue útil?

Solución

Como dijo Chris J, los valores nulos se devuelven como valores no definidos.

Si se hubiera permitido a las advertencias, que habría recibido un "valor indefinido en la impresión" de advertencia cuando se imprime los valores. Utilizando el strict y warnings prágmata puede ahorrar mucho tiempo de depuración. El pragma diagnostics añade el texto explicativo adicional a las advertencias estándar y errores fatales.

Es bastante fácil de atrapar y reemplazar los valores NULL ya que provienen de la base de datos:

use strict;
use warnings;

my @nulls = ();
while ((my $null) = $sth1->fetchrow_array)
    {
            # before perl 5.10: use the ternary operator.
            push @nulls, defined $null ? $null : 'NULL';

            # perl 5.10 adds the defined-or operator: //
            push @nulls, $null // 'NULL';
    }

O se podría construir la matriz @nulls la misma forma en que muestras arriba, y luego alterar los valores nulos en el tiempo de visualización.

my @pre_5_10  = map { defined $_ ? $_ : 'NULL' } @nulls;
my @perl_5_10 = map { $_ // 'NULL' } @nulls;

Otros consejos

http://metacpan.org/pod/DBI , devolverá los valores nulos como 'undef'.

No hacer Perl, pero en todos los demás idiomas que he usado, usted tiene que probar el valor de nulo. Si es nulo, imprima el "nulo" cadena literal.

Usted no dice lo que la base de datos que está utilizando, pero se puede hacer a nivel de SQL si no te importa una solución no portátil, por ejemplo, en Oracle:

select NVL(some_column, 'NULL')
from some_table
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top