[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 メーリングリストの案内