PHP
downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

pg_cancel_query> <PostgreSQL 関数
Last updated: Fri, 30 Jan 2009

view this page in

pg_affected_rows

(PHP 4 >= 4.2.0, PHP 5)

pg_affected_rows変更されたレコード(タプル)の数を返す

説明

int pg_affected_rows ( resource $result )

pg_affected_rows() は、INSERT, UPDATE, DELETE クエリにより変更されたタプル(インスタンス/レコード/行)の数を 返します。

注意: この関数は、以前は pg_cmdtuples() と呼ばれていました。

パラメータ

result

pg_query(), pg_query_params() あるいは pg_execute() から返される PostgreSQL の クエリ結果リソース。

返り値

クエリによって変更された行の数を返します。もし変更されたタプルがない場合は 0 を返します。

例1 pg_affected_rows() の例

<?php
$result 
pg_query($conn"INSERT INTO authors VALUES ('オーウェル', 2002, '動物農場')");

$cmdtuples pg_affected_rows($result);

echo 
$cmdtuples " タプルが変更されました。\n";
?>

上の例の出力は以下となります。

1 タプルが変更されました。

参考

  • pg_query() - クエリを実行する
  • pg_query_params() - SQL コマンドとパラメータを分割してサーバにを送信し、その結果を待つ
  • pg_execute() - 指定したパラメータを用いてプリペアドステートメントを実行するリクエストを 送信し、その結果を待つ
  • pg_num_rows() - 行数を返す



pg_cancel_query> <PostgreSQL 関数
Last updated: Fri, 30 Jan 2009
 
add a note add a note User Contributed Notes
pg_affected_rows
Anonymous
20-Dec-2007 01:02
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;
Anonymous
14-Nov-2007 05:45
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.
05-Aug-2005 01:31
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.
29-Jun-2005 04:15
Concering Bruno Baguette's note:

The pg_query function only allows one query per function call.  When you do your
$sql="BEGIN;
INSERT ...
COMMIT;";
$result=pg_query($conn,$sql);
echo pg_affected_rows($result);

you get a zero, because only the BEGIN; is executed.

The single query per call is, I beleive, a PHP builtin protection against SQL injection attacks.  (Ie someone submitting a string paramter that ends the current query and appends another one)
Bruno Baguette
28-Jun-2005 11:45
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

pg_cancel_query> <PostgreSQL 関数
Last updated: Fri, 30 Jan 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites