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

时间:2012-12-23 07:57:09

标签: php postgresql pdo yii

我有一个基于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继续交易,因为我想在应用程序中决定何时回滚 - 或者某种方式来清除错误并继续交易。

怎么做?

1 个答案:

答案 0 :(得分:5)

为此目的使用保存点:

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;