首页 文章

如何确保查询成功执行

提问于
浏览
1

我需要执行一个select语句查询并捕获返回的结果并将其存储在一个变量中 .

执行不返回任何数据 . 我检查了我的连接是否正确,因为它没有返回任何错误 .

$ dbh = DBI-> connect($ data_source,$ username,$ password)或die $ DBI :: errstr;

以下是我的查询

my $sth = $dbh->prepare('select abc from pqr');
$sth->execute();

现在我正在检查它是否有一些数据

if($sth->rows) {
    print "We have data!\n";
} else {
    print"No Data";
}

它始终打印 No Data .

用于获取我正在使用的数据

while(my @data = $sth->fetchrow_array()) {
    print "$data[1]\n";
}
$dbh->disconnect;

我没有得到任何数据 . 任何人都可以建议我这里有什么问题吗? Same Query用Java给我想要的结果 .

2 回答

  • 1

    根据DBI docs

    $ rv = $ sth-> rows;返回受最后一行影响命令影响的行数,如果行数未知或不可用,则返回-1 . 通常,在非SELECT执行后(对于某些特定操作,如UPDATE和DELETE),或者在获取SELECT语句的所有行之后,您只能依赖行计数 .

    WRT你的:

    while(my @data = $sth->fetchrow_array()) {
        print "$data[1]\n";
    }
    

    要求行的第二个([1])元素对您的查询没有意义 .

  • 1

    如果您没有处理大型结果集,那么获取所有内容会更快一些

    my $rows = $db->selectall_arrayref(qq|Select abc from def|) or die "Can't select " . $db->errstr();
    if (@$rows) {
        print "I have rows";
        foreach my $row (@$rows) {
            # do something with $row->[0]
        }
    } else {
        print "I did not get any rows/data";
    }
    

    这是另一种方式

相关问题