微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不要使用PHP,PDO和Postgres回滚事务中的错误

我有一个非常广泛的基于PHP / Yii的PHP更新脚本,它可以更新不同数据库类型的数据库(MSsql,Postgres和MysqL).

整个脚本在事务中运行.但是,有一些语句会导致查询错误(例如,如果表上已存在某个键).我用try / catch语句包围了这些 – 到目前为止这在MysqL中运行良好

但是在Postgres上发出无效查询后,事务会自动失败.以下所有语句都显示以下错误消息:

CDbCommand Failed to execute the sql statement: sqlSTATE[25P02]: In Failed sql transaction: ERROR: current transaction is aborted, commands ignored until end of transaction block

但我需要的是Postgres继续交易,因为我想在应用程序中决定何时回滚 – 或者某种方式来清除错误并继续交易.

怎么做?

解决方法:

为此目的使用保存点:

BEGIN; -- transaction starts here

-- do things if you want

SAVEPOINT my_savepoint;

-- failing statement here
-- all other statements are ignored

ROLLBACK TO SAVEPOINT my_savepoint;

-- continue your transaction starting from my_savepoint

COMMIT;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐