Bạn phải cung cấp một danh sách đối số, một đối số cho mỗi dấu hỏi, không phải đối số vô hướng đơn lẻ chứa các chuỗi đối số. Khi tôi trả lời câu hỏi của bạn trước đây, tôi đã bảo bạn làm:
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
Ở đâu $new_row
là chuỗi giữ chỗ của bạn, không phải danh sách đối số của bạn. Không phải:
$new_row .= "'" . param($field) . "', ";
...
$new_row .= "'$status'";
$sth->execute(qq($new_row)) or die $DBI::errstr;
Bởi vì $new_row
được tính là một đối số, vì nó là một đối số vô hướng. Bạn cần một mảng hoặc danh sách có cùng độ dài với số lượng dấu hỏi.