2012-10-04 11 views
0

MySQL 데이터베이스에서 가져온 데이터를 저장해야합니다. 그래서이 코드를 사용했습니다.데이터베이스에서 가져온 값 가져 오기

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

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

foreach 루프에서 @row 데이터는 비어 있습니다. 이

UPDATE를 해결하는 방법 : 그것은 실제로 다음과 같이해야한다 :

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"; 
    } 
} 
+0

첫 번째 루프의 '$ key'는 무엇입니까? 분명한 대답은'foreach'_within_'while' 루프를 사용해야한다는 것입니다. 그러나 어쨌든 저는 그것이 전부라고 생각하지 않습니다. – raina77ow

+0

코드를 편집했습니다 –

+0

DBD :: mysql :: st fetchrow_array 오류가 발생했습니다 : 실행하지 않고 fetch() –

답변

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"; 
    } 
} 

업데이트 : 귀하의 의견에서을 실제로 열 이름의 배열을해야 할 것 같습니다. 이를 수행하는 한 가지 방법이 있습니다 :

실제로, 원하는 작업을 수행하는 더 편리한 방법이 있습니다. 첫째, 단일 행을 준비하고 추출하는 단일 방법이 있습니다 : 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 
} 
+0

동안 (내 @row = $ 명령문 -> fetchrow_array) { #print "@row합니다. \ n" foreach는 내 $ 키 (@row) { $ 쿼리 = "TABLE tablename에 DROP FOREIGN KEY $ 키를 변경하는 행위 "; $ statement = $ connection-> prepare ($ query); $ statement-> execute() 또는 die "SQL Error : $ DBI :: errstr \ n"; } } –

+0

주실 수 있나요? 나는 그것을 할 괭이를 모른다. –

+0

데이터베이스에 반입 된 키를 삭제해야한다. 이 코드를 사용하면 첫 번째 데이터 만 삭제되고 다음 데이터는 예외가 발생 함을 의미합니다. –

관련 문제