2016-06-28 62 views
-1

我收到此錯誤DBD :: mysql的:: ST執行所失敗:當172需要

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; 
的這一部分中調用181個綁定變量
+1

有用的錯誤信息。你的'@ DNA'的列數多於相應的SQL語句所知。查找SQL語句的定義位置(在代碼中查找$ sth4),然後查看是否可以找出要執行的操作。您可能需要更改SQL來適應您的數據大小。 – xxfelixxx

+1

您可以通過啓用跟蹤來查看它正在嘗試運行的SQL:http://stackoverflow.com/questions/5885561/dump-prepared-sql-query-from-dbi-statement-in-perl – xxfelixxx

+0

謝謝@xxfelixxx,這給了我一些繼續。 –

回答

1

172個佔位符我假設的SQL語句已經自動生成

你需要看看周圍,在一些代碼類似

my $sth4 = $dbh->prepare(...); 

包含

my @DNA1 = split (',', $array); 

產生了具有181個元素

問題@DNA1 172個佔位符?,而你的說法是在這些線路

$array =~ tr/a-z/A-Z/; 
$array =~ s/(...)/$1 /g; 
$array =~ s/\s+/,/g; 

這顯然不這樣做你覺得他們做什麼

顯示$array的內容(在一個新問題中)並描述您真正需要的轉換,我們將能夠幫助

順便說一下,這些是一些糟糕的變量名稱。 $array顯然不是一個數組,@DBA1只是一些..數據庫列表..的東西,並沒有很好的理由大寫字母

相關問題