For det første og vigtigst bør du absolut ikke interpolere variabler direkte i dine SQL-strenge. Det efterlader muligheden for SQL-injektionsangreb åben. Selvom disse variabler ikke kommer fra brugerinput, åbner det muligheden for farlige fejl, der kan ødelægge dine data.
MySQL DBD-driveren understøtter flere udsagn, selvom den er slået fra som standard som en sikkerhedsfunktion. Se mysql_multi_statements
under Klassemetoder
afsnittet i DBD::mysql-dokumentationen.
Men en meget bedre løsning, som løser begge problemer på én gang og er mere bærbar, er at bruge forberedte udsagn og pladsholderværdier.
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
Få derefter dine data i en slags loop:
while( $whatever) {
my ( $EC, $MR, $EM ) = get_the_data();
$sth->execute( $EC, $MR, $EM );
}
Du behøver kun at forberede erklæringen én gang, og pladsholderværdierne erstattes (og er garanteret korrekt citeret) af DBD-driveren.
Læs mere om pladsholdere i DBI-dokumenterne .