Você deve fornecer uma lista de argumentos, um para cada ponto de interrogação, nem um único argumento escalar que contenha as strings dos argumentos. Quando eu respondi à sua pergunta antes, eu disse para você fazer:
my @values = map param($_), @account_field_order; # add values to array
push @values, $status; # for simplicity
$new_row = join ", ", ("?") x @values; # add ? for each value
... # basically same code as before, except the execute statement:
$sth->execute(@values); # arguments given will be inserted at placeholders
Onde
$new_row
é sua string de espaço reservado, não sua lista de argumentos. Não: $new_row .= "'" . param($field) . "', ";
...
$new_row .= "'$status'";
$sth->execute(qq($new_row)) or die $DBI::errstr;
Porque
$new_row
conta como um argumento, pois é um escalar. Você precisa de uma matriz ou lista do mesmo tamanho que o número de pontos de interrogação.