Za prvé a nejdůležitější, absolutně byste neměli interpolovat proměnné přímo do vašich SQL řetězců. To ponechává otevřenou možnost útoků SQL injection. I když tyto proměnné nepocházejí z uživatelského vstupu, ponechává otevřenou možnost nebezpečných chyb, které mohou zničit vaše data.
Ovladač MySQL DBD podporuje více příkazů, i když je ve výchozím nastavení jako bezpečnostní funkce vypnutý. Viz mysql_multi_statements
pod Třídní metody
sekce v dokumentaci DBD::mysql.
Mnohem lepším řešením, které řeší oba problémy najednou a je přenosnější, je ale použití připravených příkazů a zástupných hodnot.
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
Poté uveďte svá data do nějaké smyčky:
while( $whatever) {
my ( $EC, $MR, $EM ) = get_the_data();
$sth->execute( $EC, $MR, $EM );
}
Příkaz stačí připravit pouze jednou a zástupné hodnoty jsou nahrazeny (a zaručeno, že budou správně citovány) ovladačem DBD.
Další informace o zástupných symbolech naleznete v dokumentech DBI .