0

MySQLデータベースからフェッチしたデータを保存する必要があります。そこで、このコードを使用しました。

while (@row = $statement->fetchrow_array) 
{
  print "@row.\n"; #        ------printing data
}

foreach $key(@row)
{
  print $key."\n"; # ------empty data
}

foreachループでは、@rowデータは空です。これを解決する方法

更新:実際には次のようになります:

while (my @row = $statement->fetchrow_array) { 
  # print "@row.\n";
  foreach my $key(@row) { 
    $query= "ALTER TABLE tablename DROP FOREIGN KEY $key;"; 
    $statement = $connection->prepare($query); 
    $statement->execute() 
      or die "SQL Error: $DBI::errstr\n"; 
  } 
}
4

1 に答える 1

1

まあ、それはこのようになるはずです:

while (my @row = $statement->fetchrow_array) {
  foreach my $key (@row) {
    print $key."\n";
  }
}

それ以外の場合、すべての結果セットが最初のループで消費されます。

補足として、キーではなくfetchrow_arrayフィールドの配列として行セットを返します。キーも取得するには、次を使用する必要があります。fetchrow_hashref

while (my $row = $statement->fetchrow_hashref) {
  while (my ($key, $value) = each %$row) {
    print "$key => $value\n";
  }
}

更新:コメントから、実際には列名の配列が必要なようです。それを行う1つの方法があります:

my $row = $statement->fetchrow_hashref;
$statement->finish;
foreach my $key (keys %$row) {
  # ... dropping $key from db as in your original example
}

しかし実際には、やりたいことを行うためのより便利な方法があります。まず、単一の行を準備および抽出するための単一の方法がありますselectrow_hashref。次に、外部キー情報だけを取得したい場合は、そのために特定のDBIメソッドを使用しないのはなぜforeign_key_infoですか?例えば:

my $sth = $dbh->foreign_key_info( undef, undef, undef,
                                  undef, undef, $table_name);
my $rows = $sth->fetchall_hashref;
while (my ($k, $v) = each %$rows) {
  # process $k/$v
}
于 2012-10-04T07:02:07.493 に答える