Я думаю , что вы пытаетесь сказать, что вы не хотите пытаться вставить некоторые данные, если у вас уже есть эта комбинация имя / pid в базе данных, но я не могу сказать,Поэтому я не могу вам помочь.
Однако, вот несколько вещей, которые могут прояснить ваш код.Сначала выберите разумные имена переменных.Во-вторых, всегда, всегда, всегда используйте заполнители в ваших операторах SQL для их защиты:
for my $test11 ( sort keys %seen ) {
my $name = $seen{$test11}{'name'};
my $pid = $seen{$test11}{'pid'};
my $type = $seen{$test11}{'type'};
my $time1 = $seen{$test11}{'time1'};
my $dbh = getdb_handle();
my $sth = $dbh->prepare("Select username,pid,sno from svn_log1");
$sth->execute() or die "SQL Error: $DBI::errstr\n";
my $ref = $sth->fetchall_arrayref();
# XXX why are we fetching this data and throwing it away?
$sth = $dbh->prepare("INSERT INTO svn_log1 values(?,?,?,?,?,?)");
$sth->execute( $sno, $test11, $name, $time1, $pid, $type )
or die "SQL Error: $DBI::errstr\n";
}
Предполагая, что вы не хотите что-то вставлять в базу данных, если есть "$ name" и "$ pid"и некоторая очистка, чтобы избежать подготовки одного и того же SQL снова и снова):
my $dbh = getdb_handle();
my $seen_sth = $dbh->prepare( "Select 1 from svn_log1 where username = ? and pid = ?");
# This really needs to be "INSERT INTO svnlog1 (@columns) VALUES (@placeholders)
my $insert_sth = $dbh->prepare("INSERT INTO svn_log1 values(?,?,?,?,?,?)");
for my $test11 ( sort keys %seen ) {
my $name = $seen{$test11}{'name'};
my $pid = $seen{$test11}{'pid'};
my $type = $seen{$test11}{'type'};
my $time1 = $seen{$test11}{'time1'};
$seen_sth->execute($name, $pid) or die "SQL Error: $DBI::errstr\n";
my @seen = $seen_sth->fetchrow_array;
next if $seen[0];
$insert_sth->execute( $sno, $test11, $name, $time1, $pid, $type )
or die "SQL Error: $DBI::errstr\n";
}
Это не совсем так, как я бы написал, но это довольно ясно.Я подозреваю, что это не совсем то, что вы хотите, но я надеюсь, что это приблизит вас к решению.