Er zijn twee benaderingen. U kunt (?, ?, ?)
. invoegen een aantal keren op basis van de grootte van de array. De tekstmanipulatie zou zoiets zijn als:
my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );
Maak vervolgens de array plat voor het aanroepen van execute()
. Ik zou deze manier vermijden vanwege de netelige string- en array-manipulatie die moet worden gedaan.
De andere manier is om een transactie te beginnen en vervolgens een enkele insert-opdracht meerdere keren uit te voeren.
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;
Dit is iets langzamer dan de eerste methode, maar het vermijdt nog steeds dat de instructie opnieuw moet worden ontleed. Het vermijdt ook de subtiele manipulaties van de eerste oplossing, terwijl het nog steeds atomair is en de schijf-I/O kan worden geoptimaliseerd.