我收到此错误
DBD::mysql::st execute failed: called with 181 bind variables when 172 are needed at line 110, <$fh> line 1.
我认为问题在于代码的这一部分
while ( my $row = <$fh> ) {
chomp $row;
my @DNA = split('\|', $row);
my $participant_id = $DNA[0];
$participant_id =~ s/\>//g;
my $array = $DNA[1];
my $length = length $array;
$array =~ tr/a-z/A-Z/;
$array =~ s/(...)/$1 /g;
$array =~ s/\s+/,/g;
my @DNA1 = split (',', $array);
unshift @DNA1, $participant_id;
$sth4->execute(@DNA1); # Line 110
}
$sth4->finish;
答案 0 :(得分:1)
使用172个占位符我假设SQL语句已自动生成
您需要查看类似
之类的代码my $sth4 = $dbh->prepare(...);
包含172个占位符?
,而您的声明
my @DNA1 = split (',', $array);
导致@DNA1
有181个元素
问题出在这些方面
$array =~ tr/a-z/A-Z/;
$array =~ s/(...)/$1 /g;
$array =~ s/\s+/,/g;
显然没有做你认为他们做的事情
显示$array
的内容(在一个新问题中)并描述您真正需要的转型,我们将能够提供帮助
顺便说一句,那些是一些可怕的变量名。 $array
显然不是一个数组,而@DBA1
只是一些..数据库列表...的东西,并且没有充分的理由有大写字母