Tout d'abord et le plus important, vous ne devez absolument pas interpoler les variables directement dans vos chaînes SQL. Cela laisse ouverte la possibilité d'attaques par injection SQL. Même si ces variables ne proviennent pas de l'entrée de l'utilisateur, cela laisse ouverte la possibilité de bogues dangereux qui peuvent gâcher vos données.
Le pilote MySQL DBD prend en charge plusieurs instructions, bien qu'il soit désactivé par défaut par mesure de sécurité. Voir mysql_multi_statements
sous les méthodes de classe
dans la documentation DBD::mysql.
Mais une bien meilleure solution, qui résout les deux problèmes à la fois et est plus portable, consiste à utiliser des instructions préparées et des valeurs d'espace réservé.
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
Ensuite, placez vos données dans une sorte de boucle :
while( $whatever) {
my ( $EC, $MR, $EM ) = get_the_data();
$sth->execute( $EC, $MR, $EM );
}
Vous n'avez besoin de préparer la déclaration qu'une seule fois, et les valeurs d'espace réservé sont remplacées (et garanties d'être correctement citées) par le pilote DBD.
En savoir plus sur les espaces réservés dans les documents DBI .