pg_affected_rows() 只作用于最后执行的 SQL 语句。如果将多个语句组合在一起,则 pg_affected_rows 可能不会返回您期望的结果。
例如
<?php
$result = pg_query ('BEGIN; INSERT INTO foo (bar) VALUES (\'baz\'; COMMIT');
echo (pg_affected_rows ($result));
?>
将导致打印 0,因为 Postgres 执行的最后一条语句是 COMMIT,它不影响任何行。
我还没有尝试过这个,所以不确定它是否有效,但是如果您将查询分开,则应该能够获得您想要的行数。
例如
<?php
$result = pg_query ('BEGIN; INSERT INTO foo (bar) VALUES (\'baz\';');
echo (pg_affected_rows ($result));
pg_query ('COMMIT;');
?>
应该允许您获得先前查询影响的行数。但是我还没有尝试过,所以不要依赖它。