2024 年 PHP 大会日本站

pg_affected_rows

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

pg_affected_rows返回受影响的记录(元组)数

描述

pg_affected_rows(PgSql\Result $result): int

pg_affected_rows() 返回受 INSERTUPDATEDELETE 查询影响的元组(实例/记录/行)数。

从 PostgreSQL 9.0 及更高版本开始,服务器返回 SELECT 行的数量。较旧的 PostgreSQL 版本对 SELECT 返回 0。

注意:

此函数以前称为 pg_cmdtuples()

参数

result

一个 PgSql\Result 实例,由 pg_query()pg_query_params()pg_execute()(以及其他函数)返回。

返回值

查询影响的行数。如果没有元组受影响,则返回 0

变更日志

版本 描述
8.1.0 result 参数现在需要一个 PgSql\Result 实例;以前需要一个 资源

示例

示例 #1 pg_affected_rows() 示例

<?php
$result
= pg_query($conn, "INSERT INTO authors VALUES ('Orwell', 2002, 'Animal Farm')");

$cmdtuples = pg_affected_rows($result);

echo
$cmdtuples . " 个元组受影响。\n";
?>

以上示例将输出

1 tuples are affected.

参见

  • pg_query() - 执行查询
  • pg_query_params() - 向服务器提交命令并等待结果,能够将参数与 SQL 命令文本分开传递
  • pg_execute() - 发送请求以使用给定参数执行预准备语句,并等待结果
  • pg_num_rows() - 返回结果中的行数

添加注释

用户贡献的注释 4 条注释

匿名用户
17 年前
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;');
?>

应该允许您获得先前查询影响的行数。但是我还没有尝试过,所以不要依赖它。
Bruno Baguette
19 年前
请注意,当您在一个 BEGIN;COMMIT; 中提交多个 SQL 查询时,例如:

$SQLQuery = 'BEGIN;';
$SQLQuery.= 'INSERT INTO a (a,b) VALUES (1,2);';
$SQLQuery.= 'INSERT INTO b (ref_b,c) VALUES (2,5);';
$SQLQuery.= 'COMMIT;';

$HandleResults = pg_query($SQLQuery);
echo(pg_affected_rows($HandleResults));

pg_affected_rows() 将返回 0
匿名用户
16 年前
有一种叫做自动提交的东西,当您提供多个以分号 ; 分隔的查询时,如果一个查询失败,则所有查询都失败。执行单个查询时,不需要 BEGIN;COMMIT;ROLLBACK。就我而言,pg_affected_rows() 返回受影响的行数,如果您想分别执行 2 个查询,则执行 BEGIN,然后执行 1 并获取 pg_affected_rows(),然后执行 2 并获取 pg_affected_rows(),最后执行 COMMIT;
匿名用户
19 年前
这并不完全正确,我已经能够很好地在一个调用中执行多个查询。相反,它与这样一个事实有关:此函数返回最后一个执行的查询的受影响行数,而不是对 pg_query 的单个调用指定的最后一组查询。
To Top