Vous êtes censé fournir une liste d'arguments, un pour chaque point d'interrogation, pas un seul argument scalaire contenant les chaînes des arguments. Quand j'ai répondu à votre question avant, je vous ai dit de faire :
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
Où $new_row
est votre chaîne d'espace réservé, pas votre liste d'arguments. Non :
$new_row .= "'" . param($field) . "', ";
...
$new_row .= "'$status'";
$sth->execute(qq($new_row)) or die $DBI::errstr;
Parce que $new_row
compte comme un argument, puisqu'il s'agit d'un scalaire. Vous avez besoin d'un tableau ou d'une liste de la même longueur que le nombre de points d'interrogation.