Se supone que debes proporcionar una lista de argumentos, uno para cada signo de interrogación, no un solo argumento escalar que contenga las cadenas de los argumentos. Cuando respondí tu pregunta antes, te dije que hicieras:
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
Donde $new_row
es su cadena de marcador de posición, no su lista de argumentos. No:
$new_row .= "'" . param($field) . "', ";
...
$new_row .= "'$status'";
$sth->execute(qq($new_row)) or die $DBI::errstr;
Porque $new_row
cuenta como un argumento, ya que es un escalar. Necesita una matriz o lista de la misma longitud que el número de signos de interrogación.