[PHP-users 11614] Re: PHPでPostgreSQL のトランザクションを実行するには?

Genshirou Taki php-users@php.gr.jp
Wed, 20 Nov 2002 10:39:36 +0900


ちょうどトランザクションの導入を検討しているg_takiです。

On Wed, 20 Nov 2002 10:08:58 +0900
Mashiki <mashiki@yanah.com> wrote:

>  Mashikiです。
> 
> phpからBeginを出し、psqlからrollbackするということは、
> できないでしょう。(無改造のphp、psqlからは)
> 
>  まさか、ブラウザからBeginとLockとInsertのみ含むphpを
> を実行し、確認画面をブラウザに出した後で、次の画面で
> commit or rollback したいということでしょうか。
> 
>  これは簡単にはできないです。かつ、しないほうがよいでしょう。
> 
>
 - ばっさり -


ということは、
以下のように関数にまとめてもだめだということですね。
(まだ構想を練っている段階なので、動作テストなどしておらず)

//$sql は配列でトランザクション内で実行したいSQL文字列
function lock($sql){
$temp_sql = "BEGIN;";
$rs = pg_query($db_con, $temp_sql);

$temp_sql = "LOCK TABLE hoge_table IN ACCESS EXCLUSIVE MODE;";
$rs = pg_query($db_con, $temp_sql);

foreach($sql){
//ここでSQLをまとめて実行
	$rs = pg_query($db_con, $sql);
	if(!$rs) break;
}

if($rs){
	コミット
}else{
	ロールバック
}
//return true or false
}



今googleで PHP トランザクション で検索したところ、
http://ns1.php.gr.jp/pipermail/php-users/2002-February/005581.html
によると、

大丈夫とういうような話も出ているようですが。