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

use*_*092 3 sqlite perl select dbi

有一个perl dbi sqlite的问题.

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

所以我试着做一个'SELECT*',它只打印数据库中的第一个元素,但不是因为它应该是这个表中的所有内容.

我认为导致select*失败的错误是相同的,这使我无法使用"喜欢%..%"的东西.

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

 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 $_;
}
Run Code Online (Sandbox Code Playgroud)

Sec*_*coe 7

fetchrow_array()只获取一行.

尝试

while ( my @row = $sth->fetchrow_array ) {
  print "@row\n";
}
Run Code Online (Sandbox Code Playgroud)


Bor*_*din 6

根据the documentation,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";
}
Run Code Online (Sandbox Code Playgroud)