我需要执行select语句查询并捕获返回的结果并将其存储在变量中。
执行没有返回任何数据。我检查了我的连接是否正确,因为它没有返回任何错误。
$ dbh = DBI-> connect($ data_source,$ username,$ password) 或者死掉$ 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给我想要的结果。
答案 0 :(得分:1)
根据DBI docs
$ rv = $ sth-> rows;
返回受上一行影响命令影响的行数, 如果行数未知或不可用,则返回-1。
通常,在非SELECT执行后,您只能依赖行计数 (对于某些特定操作,如UPDATE和DELETE),或之后 获取SELECT语句的所有行。
写下你的:
while(my @data = $sth->fetchrow_array()) {
print "$data[1]\n";
}
要求行的第二个([1])元素对您的查询没有意义。
答案 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";
}
另一种做法