Pergunta

Estou executando uma consulta 'descrever tabela' e ele retorna valor de 'null' para a coluna 'default'. No entanto, quando tento imprimir o valor do banco de dados a uma tabela HTML não está imprimindo 'null'. É apenas sempre em branco.

Isto é como eu sou armazenar os dados do banco de dados:

@nulls = ();

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

Quando eu imprimir o conteúdo de @nulls variedade nunca imprime o valor literal de 'null'. É sempre em branco. Existe uma maneira de superar esse problema?

Foi útil?

Solução

Como Chris J disse, os valores nulos são devolvidos como valores indefinidos.

Se você tivesse avisos ativado, você teria recebido um "valor indefinido na impressão" de aviso quando você imprimiu os valores. Usando o strict e warnings pragmata pode economizar muito tempo de depuração. O pragma diagnostics acrescenta texto explicativo adicional para os avisos padrão e erros fatais.

É muito fácil para interceptar e substituir os valores nulos como eles vêm do banco de dados:

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';
    }

Ou você poderia construir sua matriz @nulls da mesma maneira que você mostra acima, e depois alterar os valores nulos no tempo de exibição.

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

Outras dicas

http://metacpan.org/pod/DBI , ele retornará valores nulos como 'undef'.

Eu não faço Perl, mas em todas as outras línguas que eu usei, você tem que testar o valor nulo. Se for nulo, imprimir a string literal "null".

Você não diz qual banco de dados você está usando, mas você pode fazê-lo no nível do SQL se você não se importa uma solução não-portáteis, por exemplo, em Oracle:

select NVL(some_column, 'NULL')
from some_table
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top