Domanda

Sono in esecuzione di una query 'descrivere table' e restituisce valore di 'nulla' per la colonna 'default'. Tuttavia, quando si tenta di stampare il valore da database a una tabella HTML non è la stampa 'nulla'. E 'solo sempre vuota.

Questo è come mi sto memorizzare i dati dal database:

@nulls = ();

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

Quando stampo il contenuto della serie @nulls non è mai stampa il valore letterale di 'nulla'. E 'sempre vuota. Esiste un modo per superare questo problema?

È stato utile?

Soluzione

Come ha detto Chris J, i valori nulli vengono restituiti come valori indefiniti.

Se tu avessi avvertimenti abilitato, che avrebbe ricevuto un "valore indefinito in stampa" avviso quando si stampa i valori. Utilizzando il strict e warnings pragmata può risparmiare un sacco di debug tempo. Il pragma diagnostics aggiunge testo esplicativo aggiuntivo alle avvertenze standard e gli errori fatali.

E 'abbastanza facile per intrappolare e sostituire i valori NULL come vengono dal database:

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

In alternativa si potrebbe costruire la matrice @nulls allo stesso modo si mostra sopra, e quindi alterare i valori nulli in fase di visualizzazione.

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

Altri suggerimenti

Dalla http://metacpan.org/pod/DBI , esso ritornerà valori nulli come 'undef'.

Non fare Perl, ma in ogni altra lingua che ho usato, è necessario verificare il valore per nulla. Se è null, stampare la stringa letterale "null".

Tu non dici quello del database che si sta utilizzando, ma si può fare a livello di SQL se non vi occupate di una soluzione non-portatile, per esempio, in Oracle:

select NVL(some_column, 'NULL')
from some_table
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top