我想找到一种方法来检测MySQL存储过程中回滚的情况,以便我可以从PHP脚本中相应地处理该情况,但到目前为止我找不到任何解决方案。
我的存储过程如下所示:
有没有办法在MySQL中检测回滚?我有什么遗漏吗?感谢您的阅读,期待您的回复。
感谢您的建议,我已解决了这个问题。以下是我的解决方法:
如果我使用输出变量而不是选择-1,会出现以下错误:
OUT或INOUT参数在BEFORE触发器中不是变量或NEW伪变量
我不知道我做错了什么,但我无法解决这个问题。
PHP脚本
我的存储过程如下所示:
delimiter |
create procedure multi_inserts(
IN var1 int(11),
.
.
.
IN string1 text
)
BEGIN
declare exit handler for sqlexception rollback;
declare exit handler for sqlwarning rollback;
START TRANSACTION;
insert into table1(a,b,c,d) values(var1,var2,var3,var4);
insert into table2(e,f,g) values(var5,var6,string1);
COMMIT;
END
delimiter ;
我对这个存储过程进行了回滚测试,虽然它确实回滚了,但我没有得到错误提示。 我希望我的存储过程能够在事务失败时抛出某种错误信息,这样我就可以像这样处理:
$result = mysql_query($procedure);
if(!$result)
{
//rollback occured do something
}
有没有办法在MySQL中检测回滚?我有什么遗漏吗?感谢您的阅读,期待您的回复。
感谢您的建议,我已解决了这个问题。以下是我的解决方法:
存储过程
delimiter |
create procedure multi_inserts(
IN var1 int(11),
.
.
.
IN string1 text
)
BEGIN
declare exit handler for sqlexception sqlwarning
BEGIN
rollback;
select -1;
END;
START TRANSACTION;
insert into table1(a,b,c,d) values(var1,var2,var3,var4);
insert into table2(e,f,g) values(var5,var6,string1);
COMMIT;
END
delimiter ;
如果我使用输出变量而不是选择-1,会出现以下错误:
OUT或INOUT参数在BEFORE触发器中不是变量或NEW伪变量
我不知道我做错了什么,但我无法解决这个问题。
PHP脚本
$result=mysqli_query($con,$procedure);
if(is_object($result))
{
//rollback happened do something!
}
如果SP成功,它会返回true。