Měli byste poskytnout seznam argumentů, jeden pro každý otazník, ani jeden skalární argument, který by obsahoval řetězce argumentů. Když jsem odpověděl na vaši otázku předtím jsem vám řekl, abyste to udělali:
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
Kde $new_row
je váš zástupný řetězec, nikoli váš seznam argumentů. Ne:
$new_row .= "'" . param($field) . "', ";
...
$new_row .= "'$status'";
$sth->execute(qq($new_row)) or die $DBI::errstr;
Protože $new_row
se počítá jako jeden argument, protože jde o skalár. Potřebujete pole nebo seznam o stejné délce, jako je počet otazníků.