Lo primero y más importante es que no debe interpolar las variables directamente en sus cadenas de SQL. Eso deja abierta la posibilidad de ataques de inyección SQL. Incluso si esas variables no provienen de la entrada del usuario, deja abierta la posibilidad de errores peligrosos que pueden arruinar sus datos.
El controlador MySQL DBD es compatible con varias instrucciones, aunque está desactivado de forma predeterminada como una característica de seguridad. Consulte mysql_multi_statements
en la sección Class Methods en la documentación DBD :: mysql.
Pero una solución mucho mejor, que resuelve ambos problemas a la vez y es más portátil, es usar declaraciones preparadas y valores de marcador de posición.
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
A continuación, obtener sus datos en un bucle de algún tipo:
while($whatever) {
my ($EC, $MR, $EM) = get_the_data();
$sth->execute($EC, $MR, $EM);
}
sólo es necesario para preparar el estado de una vez, y los valores de marcador de posición se sustituyen (y la garantía de ser adecuadamente citado) por el controlador DBD.
Más información sobre los marcadores de posición en el DBI docs.
en su ejemplo, no hay razón para no combinar las dos actualizaciones en uno; ¿Puedes dar un ejemplo más parecido a las actualizaciones que realmente necesitas hacer? – ysth