使用Perl和MySql,如何检查空结果?

时间:2011-06-28 19:10:03

标签: mysql perl

方式过于简单的例子:

# Get Some data
$query = $db->prepare(qq{
    select * from my_table where id = "Some Value"
});
$query->execute;

# Iterate through the results
if ( *THE QUERY HAS RETURNED A RESULT* ) {
    print "Here is list of IDs ";
    while ($query_data = $query->fetchrow_hashref) {
        print "$query_data->{id}";
    }
};

在那里寻找“THE QUERY HURN RETURN A RESULT”的代码。如果可能的话,我想避免在我的SQL中使用count(*),因为这需要“group by”。

3 个答案:

答案 0 :(得分:6)

my $sth = $dbh->prepare($stmt);
$sth->execute();

my $header = 0;
while (my $row = $sth->fetchrow_hashref) {
    print "Here is list of IDs:\n" if !$header++;
    print "$row->{id}\n";
}

替代:

my $sth = $dbh->prepare($stmt);
$sth->execute();

my $row = $sth->fetchrow_hashref;
print "Here is list of IDs:\n" if $row;
while ($row) {
    print "$row->{id}\n";
    $row = $sth->fetchrow_hashref;
}

以内存为代价的简单代码:

my $ids = $dbh->selectcol_arrayref($stmt);

if (@$ids) {
    print "Here is list of IDs:\n";
    print "$_\n" for @$ids;
}

答案 1 :(得分:1)

在我看来,您查询查询结果是多余的。如果没有要提取的行,你的while循环将评估'false'。

答案 2 :(得分:0)

旧/错误答案

如果您将DBIDBD::mysql一起使用,那么$query->rows;将返回您的陈述所选择的(或写入声明中受影响的)行数。

修改

请不要使用它并查看@Luke The Obscure

对此答案的评论