Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

valores de ligação INSERT INTO mysql perl


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.