Обсуждение: commit and rollback

Поиск
Список
Период
Сортировка

commit and rollback

От
"WeiShang"
Дата:
Hi,

I have a problem about commit and rollback using php. For the script below,
if "foo" is called and commit and if rollback statment also run. Will the
update statement under foo also rollback? or commit?

Thanks in advance!

----------------------------------------------------------------------------
-----------Script starts
function foo(var1,var2)
{
   pg_query($db,"begin");
   pg_query($db,"<update statement here>");
   pg_query($db,"commit");
}


pg_query($db,"begin");

.....
foo(v1,v2);

$result1=pg_query($db,"<update statment here>");
if (pg_affected_rows($result)==0)
    pg_query($db,"rollback");
else
    pg_query($db,"commit");

----------------------------------------------------------------------------
-----------Script end



--




Re: commit and rollback

От
John DeSoi
Дата:
On Sep 10, 2005, at 3:48 AM, WeiShang wrote:

> I have a problem about commit and rollback using php. For the
> script below,
> if "foo" is called and commit and if rollback statment also run.
> Will the
> update statement under foo also rollback? or commit?


It will commit, but it will also complete the transaction causing
everything after it to run outside the transaction. Probably not what
you would want to do.

If foo can be called both inside and outside of a transaction, you
should call pg_transaction_status (assuming PHP 5) and only begin/
commit in foo if there is no existing transaction. If you are not
using PHP 5, then setup some flag to know if you are in a transaction.


John DeSoi, Ph.D.
http://pgedit.com/
Power Tools for PostgreSQL