配列 (特定の基準を満たす顧客の候補リスト) をループし、 system() を使用して外部コマンドを実行し、操作が完了したら各行内のフィールドを更新する Perl スクリプトを作成しました。
最初のレコード (つまり、外部コマンドの実行、顧客レコードの更新) で機能しますが、2 番目のレコードに到達すると、次のエラーが表示されます。
DBD::mysql::st fetchrow_array が失敗しました: customer_update.pl で execute() なしで fetch()
グーグルで $sth->finish(); を追加しました。コマンドですが、それを含めても含めなくても(示されているようにループ内にあるか、または直後に)、同じエラーが発生します。
ここで私が間違っていることについて、誰かが私に光を当てることができますか?
ここに抜粋があります:
# PERL MYSQL CONNECT()
$dbh = DBI->connect('dbi:mysql:signups', $user, $pw)
or die "Connection Error: $DBI::errstr\n";
# DEFINE A MySQL QUERY
$myquery = "SELECT * FROM accounts WHERE field3 = false";
$sth = $dbh->prepare($myquery);
# EXECUTE THE QUERY
$sth->execute
or die "SQL Error: $DBI::errstr\n";
@records = $sth->rows;
print "Amount of new customers: @records\n\n";
while ( my ($field1, $field2, $field3) = $sth->fetchrow_array() ) {
#execute external command via system();
$update_customer_status = "UPDATE accounts SET field3=true WHERE id=$id";
$sth = $dbh->prepare($update_customer_status);
$sth->execute
or die "SQL Error: $DBI::errstr\n";
print "Customer record modified & MySQL updated accordingly\n\n";
$sth->finish();
}