Ada dua pendekatan. Anda dapat memasukkan (?, ?, ?)
beberapa kali berdasarkan ukuran array. Manipulasi teks akan menjadi seperti:
my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );
Kemudian ratakan array untuk memanggil execute()
. Saya akan menghindari cara ini karena string berduri dan manipulasi array yang perlu dilakukan.
Cara lainnya adalah memulai transaksi, lalu menjalankan satu pernyataan penyisipan beberapa kali.
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;
Ini sedikit lebih lambat dari metode pertama, tetapi masih menghindari reparsing pernyataan. Ini juga menghindari manipulasi halus dari solusi pertama, sambil tetap atomik dan memungkinkan I/O disk dioptimalkan.