1

select ステートメント クエリを実行し、返された結果をキャプチャして変数に格納する必要があります。

実行はデータを返しません。エラーが返されないため、接続が正しいことを確認しました。

$dbh = DBI->connect($data_source, $username, $password) or die $DBI::errstr;

以下は私のクエリです

my $sth = $dbh->prepare('select abc from pqr');
$sth->execute();

現在、データがあるかどうかを確認しています

if($sth->rows) {
    print "We have data!\n";
} else {
    print"No Data";
}

それは常に印刷していますNo Data

以下を使用しているデータを取得するために

while(my @data = $sth->fetchrow_array()) {
    print "$data[1]\n";
}
$dbh->disconnect;

私はデータを取得していません。ここで何が間違っているのか教えてください。Javaで同じクエリを実行すると、望ましい結果が得られます。

4

2 に答える 2

1

大きな結果セットを扱っていない場合は、すべてを取得する方が少し高速です

my $rows = $db->selectall_arrayref(qq|Select abc from def|) or die "Can't select " . $db->errstr();
if (@$rows) {
    print "I have rows";
    foreach my $row (@$rows) {
        # do something with $row->[0]
    }
} else {
    print "I did not get any rows/data";
}

それを行う別の方法

于 2013-03-31T13:53:10.933 に答える
1

DBIドキュメントによると

$rv = $sth->rows;

最後の行に影響を与えるコマンドによって影響を受けた行の数を返します。行数が不明または利用できない場合は -1 を返します。

一般に、SELECT 以外の実行後 (UPDATE や DELETE などの特定の操作の場合)、または SELECT ステートメントのすべての行をフェッチした後にのみ、行数を信頼できます。

あなたのWRT:

while(my @data = $sth->fetchrow_array()) {
    print "$data[1]\n";
}

行の 2 番目 ([1]) の要素を要求しても、クエリには意味がありません。

于 2013-03-30T19:56:57.720 に答える