Först och främst bör du absolut inte interpolera variabler direkt i dina SQL-strängar. Det lämnar möjligheten för SQL-injektionsattacker öppen. Även om dessa variabler inte kommer från användarinmatning, lämnar det möjligheten öppen för farliga buggar som kan förstöra din data.
MySQL DBD-drivrutinen stöder flera uttalanden, även om den är avstängd som standard som en säkerhetsfunktion. Se mysql_multi_statements
under Klassmetoder
avsnitt i DBD::mysql-dokumentationen.
Men en mycket bättre lösning, som löser båda problemen på en gång och är mer portabel, är att använda förberedda uttalanden och platshållarvärden.
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
Få sedan dina data i en slinga av något slag:
while( $whatever) {
my ( $EC, $MR, $EM ) = get_the_data();
$sth->execute( $EC, $MR, $EM );
}
Du behöver bara förbereda uttalandet en gång, och platshållarvärdena ersätts (och garanteras korrekt citerade) av DBD-drivrutinen.
Läs mer om platshållare i DBI-dokumenten .