Ten eerste en het belangrijkste is dat u variabelen absoluut niet rechtstreeks in uw SQL-strings moet interpoleren. Dat laat de mogelijkheid van SQL-injectie-aanvallen open. Zelfs als die variabelen niet afkomstig zijn van gebruikersinvoer, blijft de mogelijkheid open van gevaarlijke bugs die uw gegevens kunnen verknoeien.
Het MySQL DBD-stuurprogramma ondersteunt meerdere instructies, hoewel het standaard is uitgeschakeld als veiligheidsfunctie. Zie mysql_multi_statements
onder de Klasse-methoden
sectie in de DBD::mysql-documentatie.
Maar een veel betere oplossing, die beide problemen tegelijk oplost en draagbaarder is, is het gebruik van voorbereide instructies en tijdelijke aanduidingen.
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
Breng uw gegevens vervolgens in een soort lus:
while( $whatever) {
my ( $EC, $MR, $EM ) = get_the_data();
$sth->execute( $EC, $MR, $EM );
}
U hoeft de verklaring maar één keer voor te bereiden en de waarden van de tijdelijke aanduiding worden vervangen (en gegarandeerd correct geciteerd) door het DBD-stuurprogramma.
Lees meer over tijdelijke aanduidingen in de DBI-documenten .