Pertama dan paling penting, Anda sama sekali tidak boleh menginterpolasi variabel langsung ke string SQL Anda. Itu membuka kemungkinan serangan injeksi SQL. Bahkan jika variabel tersebut tidak berasal dari masukan pengguna, kemungkinan bug berbahaya yang dapat mengacaukan data Anda tetap terbuka.
Driver MySQL DBD mendukung banyak pernyataan, meskipun dimatikan secara default sebagai fitur keamanan. Lihat mysql_multi_statements
di bawah Metode Kelas
bagian dalam DBD::dokumentasi mysql.
Namun solusi yang jauh lebih baik, yang memecahkan kedua masalah sekaligus dan lebih portabel, adalah dengan menggunakan pernyataan dan nilai placeholder yang telah disiapkan.
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
Kemudian, dapatkan data Anda dalam semacam lingkaran:
while( $whatever) {
my ( $EC, $MR, $EM ) = get_the_data();
$sth->execute( $EC, $MR, $EM );
}
Anda hanya perlu menyiapkan pernyataan satu kali, dan nilai placeholder diganti (dan dijamin dikutip dengan benar) oleh driver DBD.
Baca selengkapnya tentang placeholder di dokumen DBI .