Erstens und am wichtigsten ist, dass Sie Variablen auf keinen Fall direkt in Ihre SQL-Strings interpolieren sollten. Das lässt die Möglichkeit von SQL-Injection-Angriffen offen. Selbst wenn diese Variablen nicht aus Benutzereingaben stammen, bleibt die Möglichkeit gefährlicher Fehler offen, die Ihre Daten vermasseln können.
Der MySQL-DBD-Treiber unterstützt mehrere Anweisungen, obwohl er als Sicherheitsfunktion standardmäßig deaktiviert ist. Siehe mysql_multi_statements
unter den Klassenmethoden
Abschnitt in der DBD::mysql-Dokumentation.
Aber eine viel bessere Lösung, die beide Probleme gleichzeitig löst und besser portierbar ist, ist die Verwendung vorbereiteter Anweisungen und Platzhalterwerte.
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
Bringen Sie dann Ihre Daten in eine Art Schleife:
while( $whatever) {
my ( $EC, $MR, $EM ) = get_the_data();
$sth->execute( $EC, $MR, $EM );
}
Sie müssen die Anweisung nur einmal vorbereiten, und die Platzhalterwerte werden durch den DBD-Treiber ersetzt (und garantiert korrekt in Anführungszeichen gesetzt).
Lesen Sie mehr über Platzhalter in der DBI-Dokumentation .