Il existe deux approches. Vous pouvez insérer (?, ?, ?)
plusieurs fois en fonction de la taille du tableau. La manipulation de texte serait quelque chose comme :
my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );
Aplatissez ensuite le tableau pour appeler execute()
. J'éviterais cette méthode en raison de la manipulation épineuse des chaînes et des tableaux qui doit être effectuée.
L'autre méthode consiste à commencer une transaction, puis à exécuter une seule instruction d'insertion plusieurs fois.
my $sql = 'INSERT INTO tbl (col1, col2, col3)';
$dbh->{AutoCommit} = 0;
my $sth = $dbh->prepare_cached( $sql );
$sth->execute( @$_ ) for @array;
$sth->finish;
$dbh->{AutoCommit} = 1;
C'est un peu plus lent que la première méthode, mais cela évite toujours de réanalyser l'instruction. Elle évite également les manipulations subtiles de la première solution, tout en restant atomique et en permettant d'optimiser les E/S disque.