Първо и най-важно, абсолютно не трябва да интерполирате променливи директно във вашите SQL низове. Това оставя отворена възможността за атаки с инжектиране на SQL. Дори ако тези променливи не идват от въвеждане на потребителя, това оставя отворена възможността за опасни грешки, които могат да прецакат данните ви.
MySQL DBD драйверът поддържа множество изрази, въпреки че е изключен по подразбиране като функция за безопасност. Вижте mysql_multi_statements
под Методи на клас
раздел в документацията на DBD::mysql.
Но много по-добро решение, което решава и двата проблема наведнъж и е по-преносимо, е да се използват подготвени изрази и стойности за място.
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
След това изведете данните си в някакъв цикъл:
while( $whatever) {
my ( $EC, $MR, $EM ) = get_the_data();
$sth->execute( $EC, $MR, $EM );
}
Трябва да подготвите изявлението само веднъж, а стойностите на заместителя се заменят (и гарантирано, че ще бъдат правилно цитирани) от DBD драйвера.
Прочетете повече за заместителите в DBI документите .