[pgsql-jp: 31540] PEAR::DB pgsqlのautocommitについて
Tanaka-Qtaro-Yasuhiro
tanaq @ ca2.so-net.ne.jp
2003年 11月 19日 (水) 22:39:35 JST
田中久太郎です。
PEARのDBを使って PostgreSQLのデータベースを更新するプログラムを
作成しています。
データベースの autocommitを falseにして使用しているのですが、
UPDATEや INSERTを行おうとすると、postgresqlが、
NOTICE: BEGIN: already a transaction in progress
というエラーを吐きます。
PEARの DB/pgsql.phpの simpleQuery関数を見てみると、以下のように
autocommitがfalseのときに begin; を発行するようになっているので
すが、この動きは正しいのでしょうか?
function simpleQuery($query)
{
$ismanip = DB::isManip($query);
$this->last_query = $query;
$query = $this->modifyQuery($query);
if (!$this->autocommit && $ismanip) {
~~~~~~~~~~~~~~~~~~
if ($this->transaction_opcount == 0) {
$result = @pg_exec($this->connection, "begin;");
~~~~~~
if (!$result) {
return $this->pgsqlRaiseError();
}
}
$this->transaction_opcount++;
}
$result = @pg_exec($this->connection, $query);
if (!$result) {
return $this->pgsqlRaiseError();
}
<<後略>>
【サンプル】
<?php
$dsn = "pgsql://testuser:testpass@testhost/testdb";
$db = DB::connect($dsn, false);
$db->autoCommit(false);
$db->query('BEGIN');
$db->query("UPDATE test_table SET name = 'TEST'");
$db->query('COMMIT');
?>
できれば、さきの注意メッセージが出ないようにしたいのですが。
何か良い回避策をご存知の方がいらっしゃれば教えてください。
pgsql-jp メーリングリストの案内