Zuerst und am wichtigsten, sollten Sie Variablen nicht direkt in Ihre SQL-Zeichenfolgen interpolieren. Das lässt die Möglichkeit von SQL-Injection-Angriffen offen. Selbst wenn diese Variablen nicht von Benutzereingaben stammen, können gefährliche Fehler auftreten, die Ihre Daten beschädigen können.
Der MySQL DBD-Treiber unterstützt mehrere Anweisungen, obwohl er standardmäßig als Sicherheitsfunktion deaktiviert ist. Siehe mysql_multi_statements
unter dem Class Methods Abschnitt in der DBD :: mysql-Dokumentation.
Aber eine viel bessere Lösung, die beide Probleme auf einmal löst und portabler ist, ist die Verwendung vorbereiteter Anweisungen und Platzhalterwerte.
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
Dann erhalten Sie Ihre Daten in einer Schleife von einer Art:
while($whatever) {
my ($EC, $MR, $EM) = get_the_data();
$sth->execute($EC, $MR, $EM);
}
Sie müssen nur die Anweisung einmal vorbereiten und die Platzhalter-Werte ersetzt werden (und garantiert richtig zitiert werden) durch der DBD-Treiber.
Lesen Sie mehr über Platzhalter in der DBI docs.
in Ihrem Beispiel, gibt es keinen Grund, nicht die beiden Updates zu einem kombinieren; Können Sie ein Beispiel mehr wie die Updates geben, die Sie tatsächlich tun müssen? – ysth