У меня есть скрипт Perl, который создает sql cmd для установки определенных полей в NULL в определенной таблице в MS Access db (извините). Вот упрощенный макет.perl/dbi/sql, в котором находится ошибка «операция должна использовать обновляемый запрос»
my $nonKeyFields_hashref = { "country" => "ZZZ",
"address3" => "FOO"
};
my $keyFields_hashref = { "address1" => "1212 O'Mally Street", # embedded single quote here is causing the problem
"client ID" => "1234567"
};
my $sqlCmd = "UPDATE myTable SET ";
$sqlCmd .= join(", " , map{ "[?} = NULL "} keys $nonKeyFields_hashref;
$sqlCmd .= " WHERE ";
$sqlCmd .= join(" AND " , map{ "[?} = ? "} keys $keyFields_hashref;
# sqlCmd contains "UPDATE myTable SET [?] = NULL, [?} = NULL WHERE [?] = ? AND [?] = ?"
$sth = $dbh->prepare($sqlCmd);
if(!defined($sth)) {
_pushErrorMsg("sth failed to define - ".$DBI::errstr);
$errorHit = 1;
} else {
my @cmd_arry =();
push(@cmd_arry, $_) for keys $nonKeyFields_hashref;
push(@cmd_arry, $_ , $keyFields_hashref->{$_}) for keys $keyFields_hashref;
print Dumper(@cmd_arry);
# dumper shows @cmd_arry contains ("country", "address3", "address1", "1212 O'Mally Street", "client ID", "1234567")
# which is six elements, which jibes with the query's question-marks
$sth->execute(@cmd_arry); # errors here with the given message
....
}
этот код отлично работает, когда данные НЕ содержат неприятных встроенных одиночных кавычек. Я надеялся, что привязка решит эту проблему, но такой удачи не будет.
У кого-нибудь есть решение этой проблемы с одной кавычкой?
Спасибо заранее,
Тем не менее, обучение Стива.
даст это попробовать, спасибо за ваш ответ – user1201168
я только что понял, ты такой же человек, который спросил Http:! // stackove rflow.com/questions/17479928/trouble-creating-table-with-a-field-of-type-memo-in-access-db-using-perl-dbi-odb и не отмечал моего ответа. Разве он не ответил на ваш вопрос? – bohica