Perl dbi sqlite'select * ..'只返回第一个元素

时间:2012-11-25 19:52:00

标签: perl sqlite select dbi

遇到了perl dbi sqlite的问题。

我已经设置了一个数据库(并使用sqlite命令行进行了检查)。 现在我想搜索这个无效的数据库。

所以我试着做一个'SELECT *' 这会在数据库中打印仅第一个元素,但不会打印此表中的所有内容。

我认为导致select *失败的错误与阻止我使用“like%..%”的东西相同。

这是相关的代码,如果代码是正确的,数据库表似乎还有什么可能导致问题?

 my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","","") || die "Cannot connect: $DBI::errstr";

my $sth = $dbh->prepare('SELECT * FROM words');
$sth->execute;
my @result = $sth->fetchrow_array();


foreach( @result) {
    print $_;
}

2 个答案:

答案 0 :(得分:7)

fetchrow_array ()只提取一行。

尝试

while ( my @row = $sth->fetchrow_array ) {
  print "@row\n";
}

答案 1 :(得分:6)

根据the documentationfetchrow_array

  

获取下一行数据并将其作为包含字段值的列表返回。

如果你想要所有数据,你可以反复调用fetchrow_array(或fetchrow_arrayref),直到你到达表的末尾,或者你可以使用{{1 }}:

  

fetchall_arrayref方法可用于获取从准备和执行的语句句柄返回的所有数据。它返回对每行包含一个引用的数组的引用

代码看起来像这样

fetchall_arrayref