Perl dbi sqlite只返回第一个元素,如何解决?

3

我在perl dbi sqlite中遇到了问题。

我已经建立了一个数据库(并使用sqlite命令行进行了检查)。 现在我想要在这个数据库中搜索,但是没有成功。

所以我尝试只做一个“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个回答

7

fetchrow_array() 只获取一行数据。

尝试使用:

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

你应该在你的回答中添加“strict”来改进它。否则,你说得很对。 - simbabque

6
根据文档fetchrow_array方法返回包含字段值的列表,表示下一行数据。
如果需要获取所有数据,可以通过反复调用 fetchrow_array (或fetchrow_arrayref) 直到到达表格末尾,或者使用fetchall_arrayref

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

代码将如下所示。
use strict;
use warnings;

use DBI;

my $dbfile = 'words.db';

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

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

foreach my $row ( @$result ) {
  print "@$row\n";
}

在DBI->connect()的密码参数中有错误。 - capfan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接