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()は1行のみをフェッチします。

試す

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

によるとthe documentationfetchrow_array

データの次の行を取得し、フィールド値を含むリストとして返します。

すべてのデータが必要な場合は、テーブルの最後に到達するまで繰り返しfetchrow_array(または) を呼び出すか、次を使用できます。fetchrow_arrayreffetchall_arrayref

fetchall_arrayref メソッドを使用して、準備および実行されたステートメント ハンドルから返されるすべてのデータをフェッチできます。行ごとに1つの参照を含む配列への参照を返します

コードは次のようになります

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 に答える