3

我正在运行一个查询“描述表”,它为“默认”列返回“空”值。但是,当我尝试将值从数据库打印到 HTML 表时,它不会打印“null”。它总是空白。

这就是我从数据库中存储数据的方式:

@nulls = ();

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

当我打印数组的内容时,@nulls它从不打印'null'的字面值。它始终是空白的。有没有办法克服这个问题?

4

4 回答 4

13

正如 Chris J 所说,空值作为未定义值返回。

如果您启用了警告,您将在打印值时收到“未定义的打印值”警告。使用strictwarningspragmata 可以节省大量的调试时间。diagnosticspragma 为标准警告和致命错误添加了额外的解释性文本。

捕获和替换来自数据库的 NULL 值非常容易:

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

或者您可以@nulls按照上面显示的相同方式构建数组,然后在显示时更改空值。

my @pre_5_10  = map { defined $_ ? $_ : 'NULL' } @nulls;
my @perl_5_10 = map { $_ // 'NULL' } @nulls;
于 2009-02-23T05:25:55.303 回答
7

http://metacpan.org/pod/DBI,它将返回 null 值作为 'undef'。

于 2009-02-23T04:45:34.510 回答
2

我不使用 Perl,但在我使用过的所有其他语言中,您必须测试 null 的值。如果为空,则打印出字符串文字“null”。

于 2009-02-23T04:39:24.353 回答
1

您没有说您使用的是什么数据库,但如果您不介意非便携式解决方案(例如在 Oracle 中),则可以在 SQL 级别执行此操作:

select NVL(some_column, 'NULL')
from some_table
于 2009-02-23T21:24:17.433 回答