3

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 $_;
}
4

2 回答 2

7

fetchrow_array () 只取一行。

尝试

while ( my @row = $sth->fetchrow_array ) {
  print "@row\n";
}
于 2012-11-25T19:59:31.517 回答
6

the documentationfetchrow_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";
}
于 2012-11-25T20:03:57.410 回答