2
好吧,我已经解决了,反正我不知道为什么它的工作...:PMySQL的“命令不同步”
我的第一个代码是:
my ($sth,$rc);
eval{
$sth = $dbh->prepare('CALL mysp(?,?)');
$rc = $sth->execute(1,2);
if ($rc eq '1'){# ok}
};
if([email protected]){
$dbh->rollback;
warn [email protected];
}else{
$dbh->commit;
}
它停止与MySQL错误“命令不同步”对犯下
eval{
my $sth = $dbh->prepare('CALL mysp(?,?)');
my $rc = $sth->execute(1,2);
if($rc eq '1'){# ok}
};
if([email protected]){
$dbh->rollback;
warn [email protected];
}else{
$dbh->commit;
}
本地化$sth
和$rc
到eval{}
它的工作原理之后......为什么?
'$ sth'添加的隐式'$ sth-> finish'超出范围??? – ikegami
看起来很像[DBI begin_work不能用于存储过程调用](http://stackoverflow.com/q/6454840)中描述的问题。 [pilcrow's answer](http://stackoverflow.com/a/10001508/176646)是在提交事务之前显式调用'$ sth-> finish()'(与@ikegami所说的一样)。 – ThisSuitIsBlackNot