1

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

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

$dbh = DBI->connect($data_source, $username, $password) or 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 结果。

4

2 回答 2

1

根据 DBI文档

$rv = $sth->行;

返回受最后一个影响行的命令影响的行数,如果行数未知或不可用,则返回 -1。

通常,您只能在非 SELECT 执行(对于某些特定操作,如 UPDATE 和 DELETE)或获取 SELECT 语句的所有行之后依赖行计数。

写你的:

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

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

于 2013-03-30T19:56:57.720 回答
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";
}

只是另一种方式

于 2013-03-31T13:53:10.933 回答