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;');
?>
应该允许你获得上一个查询影响的行数。但是,我还没有尝试过,所以不要依赖它。