[PHP-users 14856]Re: [PHP-users14665]PEARでクエリが実行されるときとされない時がある
sorako yamamoto
sorako_yamamoto @ hotmail.com
2003年 4月 24日 (木) 02:06:20 JST
こんにちは。Setoさん、返信ありがとうございます。
なんとなく原因が分かってきたような…
感じ的にトランザクションの問題ではないかという気がしてます。
エラーになってしまうのが、select文を実行した時の画面だったため、
提示コードもselectクエリ実行部分のみだったのですが、
実際には、execSelect()とupdateSelect()の2つの関数で処理を行っています。
(なので、exec()という関数は使用してないです…紛らわしくてすみません。)
/* DB関数 */
// selectを実行させる場合。
function execSelect( $sQuery )
{
$DNS = "pgsql://unix()/Test" ;
$objCon = DB::connect( $DNS, true); // DBへ接続
if ( DB::isError($objCon ) ) {
die( "接続エラー" );
}
$objCon->setErrorHandling( PEAR_ERROR_CALLBACK, "myDBErrorHandler" );
$objRs = $objCon->query( $sQuery );
while( $row = $objRs->fetchRow( DB_FETCHMODE_ASSOC ) ) {
$aResult[] = $row ;
}
return $aResult ;
}
// insert updateを実行させる場合。
function execUpdate( $sQuery )
{
$DNS = "pgsql://unix()/Test" ;
$objCon = DB::connect( $DNS, true); // DBへ接続
if ( DB::isError($objCon ) ) {
die( "接続エラー" );
}
$objCon->setErrorHandling( PEAR_ERROR_CALLBACK, "myDBErrorHandler" );
// トランザクションの開始
$this->db->query("BEGIN") ;
$objRs = $objCon->query( $sQuery );
// コミット
$this->db->query("COMMIT") ;
return ;
}
// エラー時に呼び出される。
function myDBErrorHandler()
{
print( "DBエラー" );
}
/* 呼び出し側 */
// select実行画面
$aResult = execSelect( "select * from test_table ") ;
$cnt = count($aResult) ;
for( $i=0 ; $i < $cnt ; $i++ ) {
print $aResult[$i]["col1"] ;
print $aResult[$i]["col2"] ;
}
// insert実行画面
execUpdate("insert into test_table values( 'xxxx', 'ssss', 'aaaa')") ;
> pgsqlより
> >「current transaction is aborted, queries ignored until
> >end of transaction block」
> トランザクションが発生している箇所が記載されてませんので
> 提示されたコードだけの問題ではなさそうですね。
> または記載された関数をつかってBEGINを発行して
> その後のfetchRowでエラーになってるとか。
このソースでは、
execUpdate()で、ロールバックも何も行っていないのですが、
(1つのSQLしか処理しないので、あえてロールバックを行う必要もないのかなと思い
入れてませんでしたが…?)
この作りに問題があるのでしょうか。
もし、エラーになった場合、BEGIN発行後、COMMITは行われないですよね。
insert実行画面でexecUpdate()を実行し、何らかのエラーが発生した場合、
その後、select実行画面を表示すると
execSelect()が正常に実行されたり、されなかったり
という現象になってしまっているのでしょうか。
PHPというよりPostgresの問題の様ですが…
すみませんが、ご意見ください。
よろしくお願いします。
_________________________________________________________________
最新のファイナンス情報とライフプランのアドバイス MSN マネー
http://money.msn.co.jp/
PHP-users メーリングリストの案内