gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 00:47:47 24 4
gpt4 key购买 nike

我有一个基于 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;

关于php - 不要回滚使用 PHP、PDO 和 Postgres 的事务中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14009506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com