PHP 8.5.0 Alpha 1 available for testing

pg_affected_rows

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

pg_affected_rows Devuelve el número de filas afectadas

Descripción

pg_affected_rows(PgSql\Result $result): int

pg_affected_rows() devuelve el número de filas afectadas por las consultas de tipo INSERT, UPDATE y DELETE.

Desde PostgreSQL 9.0 y versiones posteriores, el servidor devuelve el número de filas seleccionadas. Para las versiones anteriores, PostgreSQL devuelve 0 para las SELECT.

Nota:

Anteriormente, esta función se llamaba pg_cmdtuples().

Parámetros

result

An PgSql\Result instance, returned by pg_query(), pg_query_params() or pg_execute()(among others).

Valores devueltos

El número de filas afectadas por la consulta. Si no hay tuplas afectadas, la función devolverá 0.

Historial de cambios

Versión Descripción
8.1.0 The result parameter expects an PgSql\Result instance now; previously, a recurso was expected.

Ejemplos

Ejemplo #1 Ejemplo con pg_affected_rows()

<?php
$result
= pg_query($conn, "INSERT INTO editeur VALUES ('Auteur')");

$cmdtuples = pg_affected_rows($result);

echo
$cmdtuples . " filas han sido afectadas.\n";
?>

El resultado del ejemplo sería:

1 filas han sido afectadas.

Ver también

  • pg_query() - Ejecuta una consulta PostgreSQL
  • pg_query_params() - Envía un comando al servidor y espera el resultado, con la capacidad de pasar parámetros por separado del texto SQL de la consulta
  • pg_execute() - Ejecuta una consulta preparada de PostgreSQL
  • pg_num_rows() - Devuelve el número de filas de PostgreSQL

add a note

User Contributed Notes 4 notes

up
10
Anonymous
17 years ago
pg-affected-rows () only runs on the LAST SQL STATEMENT executed. If you compound several statements together then pg_affected_rows might not return what you expect.

For example:

<?php

$result
= pg_query ('BEGIN; INSERT INTO foo (bar) VALUES (\'baz\'; COMMIT');

echo (
pg_affected_rows ($result));

?>

will cause 0 to be printed, because the last statement executed by Postgres was COMMIT, which doesn't affect any rows.

I haven't tried this so am not certain it works, but you SHOULD be able to get the row counts you want if you split your queries up.

For example:

<?php

$result
= pg_query ('BEGIN; INSERT INTO foo (bar) VALUES (\'baz\';');

echo (
pg_affected_rows ($result));

pg_query ('COMMIT;');
?>

should allow you to get the number of rows affected by the previous query. I haven't tried this yet though, so don't count on it.
up
-1
Bruno Baguette
20 years ago
Note that when you submit several SQL queries, within one BEGIN;COMMIT; like this one :

$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() will return 0
up
-2
Anonymous
17 years ago
There is something called auto-commit, when you supply more than one query delimited by ; semicolon all-or-none is done if one fails. No need for BEGIN;COMMIT;ROLLBACK when doing one query. its logic to mee pg_affected_rows() returns affected rows and if you want to do 2 queries apart from each other.. do a BEGIN and then 1 and get pg_affected_rows() then do 2 and get pg_affected_rows() and then finally do COMMIT;
up
-3
Anonymous
19 years ago
That's not quite true, I've been able to execute multiple queries in a single call just fine. In stead, it has to do with the fact this function returns the affected rows for the last executed query, not the last set of queries specified to a single call to pg_query.
To Top