好的,我已经修好了,无论如何我不知道它为什么会起作用......:P
我的第一个代码是:
my ($sth,$rc);
eval{
$sth = $dbh->prepare('CALL mysp(?,?)');
$rc = $sth->execute(1,2);
if ($rc eq '1'){# ok}
};
if($@){
$dbh->rollback;
warn $@;
}else{
$dbh->commit;
}
它停止了mysql错误"命令不同步"在提交
eval{
my $sth = $dbh->prepare('CALL mysp(?,?)');
my $rc = $sth->execute(1,2);
if($rc eq '1'){# ok}
};
if($@){
$dbh->rollback;
warn $@;
}else{
$dbh->commit;
}
将$sth
和$rc
本地化为eval{}
之后,它有效吗?为什么?
答案 0 :(得分:0)
池上的回答是正确的。
你需要调用$ sth-> finish(),这是隐式完成的,因为它超出了eval {}块的范围。