2009-11-30 7 views
1

해시가 있으며 해당 값을 데이터베이스에 삽입하려고합니다. 해시는 다음과 같이 정의됩니다.Perl의 DBI가있는 열에 어떻게 해시 값을 삽입 할 수 있습니까?

my %hash = (
      1 => 'First Word', 
      2 => 'Second Word is correct', 
      0 => 'Third word does not exist', 
      ); 

해시를 사용하여 데이터베이스에 값을 삽입하는 방법을 알지 못합니다. 내 질문에 this 질문과 비슷합니다. 그러나 그 대답 중 어느 것도 맞지는 않습니다. 나열된 답변 중 하나를 사용할 때 해시 값이 삽입되지 않고 대신 해시에 대한 참조 (예 : ARRAY(0x9e63b30))가 삽입됩니다. 하지만 내가 print Dumper @values 일 때 값이 인쇄되고 참조 값이 아닙니다.

값을 삽입하는 방법에 대한 제안이나 참조가 아닌 제안 사항은 무엇입니까? 그리고 question에 대한 답변에 나열된 솔루션에서 잘못된 점이 무엇입니까?

@values가 this 질문과 동일 정의 즉

my @values = values %hash; 

편집 : DB 구조 :

T1 : 위의 SID에

sid sentence 
1 First Word 
2 Second Word is correct 
0 Third word does not exist 

해시의 keys과 문장 values입니다 해시 @values 참조 값이 삽입지고 삽입하는 동안, 다시

my @keys = keys %hash; 

my @values = values %hash; 

my $sth = $dbh->prepare("INSERT INTO T1(sid, sentence) VALUES (?,?);"); 

$sth->execute_array({},\@keys, \@values); 

:

이것은 내가 (이 question에 대한 답변 중 하나입니다) 밖으로 시도하는 것이다.

편집 :

_ OUTPUT _

$VAR1 = 'First Word'; 
$VAR2 = 'Third word does not exist'; 
$VAR3 = 'Second Word is correct'; 

_ CODE _ 내가 다른 한편으로

my $x=0; 
foreach my $file(@files){ 
     if ($file =~ /regex/){ 
       push(@{$hash{$x}}, "$1 $2 $3 $4 $5 $6 $7"); 
     } 
     elsif ($file =~ /regex/){ 
       push(@{$hash{$x}}, "$1 $2 $3 $4 $5 $6"); 
     } 
     elseif ($file =~ /Hs_(.+)_(.+)_(.+)_(.+)_(.+)_W.+txt/){ 
       push (@{$hash{$x}}, "$1 $2 $3 $4 $5"); 
     } 
$x++; 
} 
+0

그 인접 질문에 대한 답변의 모든이 올바른지 (이 자습서에 액세스하기 위해 명령

perldoc perlreftut 

를 사용). 데이터베이스를 업데이트하는 데 정말로 도움이 필요합니까? 아니면 Perl 표준 데이터 구조로 작업하는 데 도움이 필요합니까? – innaM

+0

@Manni : 답변이 올바른 경우 참조 값이 실제 값 대신 db로 업로드되는 이유는 무엇입니까? – birdy

+1

몇 가지 코드를 보여줍니다. 적어도 SQL 문과 execute 문. 그런 다음 데이터베이스에 관해 알려주십시오. 우리는 어떻게 그 값들이 당신의 DB에서 끝나길 원하는지 생각했습니다. 키가 행, 열 또는 둘 다 표시합니까? – innaM

답변

2

원래 게시 한 내용이 아닙니다. 배열에 대한 참조의 해시가 있습니다. 그들에 대해 배우려면 펄 참조 튜토리얼 (perlreftut)을 읽어라.

0

내 회신 % 해시에 값을 삽입하고 방법이있다 thread 당신은 작업에 연결되어있었습니다. 나는 그것을 시험하고 여러 번 사용했다. execute_array()는 사용하지 않고 execute() 만 사용합니다.

+0

데이터베이스에 키와 값을 모두 삽입하려고하고 코드가이를 수행하지 않습니다. 그것은 단지 값을 삽입하는 것입니다. – birdy

+0

'키'라고 말하면 'sid'와 'sentence'필드에 값을 채우려는 것입니다. 맞습니까? 만약 당신이 다른 일을하려한다면 나는 당신을 얻지 못하고 .. 그리고 이것이 우리가 설명했던 방법 중 어떤 것을하려고 시도하는 것이라면 그것을 다루어야합니다. –

0

이렇게하면됩니다.

my $key; 
my $value; 
while (($key, $value) = each %hash) { 
    $sth->bind_param(1, $key); 
    $sth->bind_param(2, $value); 
    $sth->execute(); 
} 
+0

루프를 'while (my ($ key, $ value) = each % hash)'이라고 쓰는 것이 훨씬 낫습니다. – friedo

+0

실제 값 대신에 참조가 계속 업로드되지 않습니다. – birdy

+0

해시에서 얻은 값이 올바른지 확인하기 위해 루프에서 $ key와 $ value를 출력하십시오. –

0

UPDATE :

내가 이전 thread에서 기능 예제 중 하나를 잡고 데이터베이스와 시스템에서 작업을 얻을 것이 좋습니다. 일단 이러한 예제 중 하나를 작동 시키면 자신 만의 코드를 고칠 수 있어야합니다.


이전 답 : execute_array()를 사용하는 다른 thread

내 대답은 내가 게시하기 전에 그것을 테스트, 작동합니다.

+0

펄 아래 key: >1< value: >First Word< key: >0< value: >Third word does not exist< key: >2< value: >Second Word is correct< 생성하지만. – birdy

+0

코드를 더 많이 볼 수 있다면 도움이 될 것입니다. –

+0

내 코드의 일부를 더 추가했습니다. % hash를 만드는 방법을 추가했습니다. – birdy

관련 문제