[pgsql-jp: 31913] PREPAREとEXECUTE時のpg_affected_rows()関数

takada @ lifedesign.co.jp takada @ lifedesign.co.jp
2004年 1月 7日 (水) 16:46:37 JST


こんにちは。以前、Oracleとの処理の違いについて教えて
いただいた高田と申します。この前教えていただいた、
PREPAREとEXCUTEを使って更新系の処理を書いているの
ですが、insert文をPREPAREして、EXCUTEした後
pg_affected_rows()で更新行数を取得しようとすると、
pg_affected_rows()が0を返します。これはそういう
ものなのでしょうか。。
具体的には以下のようなコードです。
---------------------------------------------------
$TextDetailSql=<<<SQL
	PREPARE insertTEXT_DETAIL(int) as 
	insert into TEXT_DETAIL
		(TEXT_DB_ID,CODE_1,CODE_2,CODE_3,CATEGORY_2,CATEGORY_3,
		TEXT_1,TEXT_2,TEXT_3,TEXT_4,TEXT_5,TEXT_6,TEXT_7,
	
TEXT_8,TEXT_9,TEXT_10,TEXT_11,TEXT_12,TEXT_13,TEXT_14,VERSION)
	values
		(\$1,'code1','code2','code3',
		'categ2','catego3',
		'name1','name2','name3','name4','name5',
		'name6','name7','name8','name9','name10',
	
'name11','name12','name[13]','name[14]',nextval('seq_version'))
SQL;

$conn   = pg_connect("dbname=*** user=postgresql password=postgresql");
pg_query($conn,$TextDetailSql);
$stmt=pg_query($conn,"EXECUTE insertTEXT_DETAIL(20)");
$Rows=pg_affected_rows($stmt);
if($Rows==1){pg_query($conn,"commit");}
else {pg_query($conn,"rollback");}
pg_query($conn,"DEALLOCATE insertTEXT_DETAIL");
pg_close($conn);
---------------------------------------------------

このとき$Rowsに0が入ってしまい、更新がうまくできたかどうか
の判定ができません。

環境はLinux+PostgreSQL7.3.4+PHP4.3.4です。

ちなみにpostgresql.confのautocommit = falseにしています。

よろしくお願いします。




pgsql-jp メーリングリストの案内