[PHP-users 21192]Re: PEARでpostgresqlのトランザクション開始
Daichi Ueura
daichi @ lifeflow.jp
2004年 4月 8日 (木) 17:28:47 JST
上浦です.
ついでですが,
"SELECT FOR UPDATE"
でもトランザクションが開始されません.
#自分でBEGINを実行するしかないのかな
On Thu, 08 Apr 2004 15:39:14 +0900
Tanaka-Qtaro-Yasuhiro <tanaq @ ca2.so-net.ne.jp> wrote:
> 田中久太郎です。
>
> KOYAMA Tetsujiさんの<87isgb3wuj.wl @ poseidon.hoge.org>から
> > ただ単に PEAR DB でトランザクションを利用したいというだけなら、
> >
> > $db = DB::connect($dsn);
> > $db->autoCommit(false);
>
> 申し訳ありません。言葉が足りなかったようです。
>
> $db->autoCommit(false);をしたうえで、
> “SET CONSTRAINTS 〜”文を実行してもトランザクションが開始されないの
> です。
>
> PEARのDB/pgsql.phpのソースを見ると、beginを行うタイミングは以下のよう
> になっていて、$ismanipな queryじゃないとトランザクションを開始しないの
> ですが、
>
> if (!$this->autocommit && $ismanip) {
> if ($this->transaction_opcount == 0) {
> $result = @pg_exec($this->connection, "begin;");
> if (!$result) {
> return $this->pgsqlRaiseError();
> }
> }
> $this->transaction_opcount++;
> }
>
> その $ismanipな queryというのは、以下のファンクション(DB.php)で判定される
> queryなので、“SET CONSTRAINTS”文ではトランザクションが開始しないのは、
> 当然といえば当然なのです。
>
> function isManip($query)
> {
> $manips = 'INSERT|UPDATE|DELETE|'.'REPLACE|CREATE|DROP|'.
> 'ALTER|GRANT|REVOKE|'.'LOCK|UNLOCK';
> if (preg_match('/^\s*"?('.$manips.')\s+/i', $query)) {
> return true;
> }
> return false;
> }
>
> ここで質問なのですが、
> PEAR DBでPostgreSQLを利用するときに強制的にトランザクションを開始させる
> にはどういった方法が良いのでしょうか?
> 皆さんの対処法などをご教示いただければ幸いです。
>
>
>
> _______________________________________________
> PHP-users mailing list PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
┛
┛ Daichi Ueura
┛
┛ Hiroshima City Univ, Department of Intelligent Systems.
┛ e-mail: (Private) daichi @ lifeflow.jp
┛ : (Office) daichi @ neu.co.jp
┛ : (Univ) daichi @ v6.ipc.hiroshima-cu.ac.jp
┛
┛
PHP-users メーリングリストの案内