pg_affected_rows
(PHP 4 >= 4.2.0, PHP 5)
pg_affected_rows — Возвращает количество затронутых запросом записей (кортежей)
Описание
$result
)pg_affected_rows() возвращает количество кортежей (сущностей/записей/рядов) затронутых запросом INSERT, UPDATE, и DELETE queries.
Замечание:
Ранее данная функция называлась pg_cmdtuples().
Список параметров
-
result
-
Результат запроса к PostgreSQL , значение типа resource, возвращаемое функцией pg_query(), pg_query_params() или pg_execute() (среди прочих).
Возвращаемые значения
Количество записей, затронутых запросом. Если ни один кортеж не был затронут, функция вернет 0.
Примеры
Пример #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 кортежей затронуто.
Смотрите также
- pg_query() - Выполняет запрос
- pg_query_params() - Посылает параметризованный запрос на сервер, параметры передаются отдельно от текста SQL запроса
- pg_execute() - Запускает выполнение ранее подготовленного параметризованного запроса и ждет результат
- pg_num_rows() - Возвращает количество строк в выборке
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с базами данных
- Расширения для работы с базами данных отдельных производителей
- PostgreSQL
- pg_affected_rows
- pg_cancel_query
- pg_client_encoding
- pg_close
- pg_connect_poll
- pg_connect
- pg_connection_busy
- pg_connection_reset
- pg_connection_status
- pg_consume_input
- pg_convert
- pg_copy_from
- pg_copy_to
- pg_dbname
- pg_delete
- pg_end_copy
- pg_escape_bytea
- pg_escape_identifier
- pg_escape_literal
- pg_escape_string
- pg_execute
- pg_fetch_all_columns
- pg_fetch_all
- pg_fetch_array
- pg_fetch_assoc
- pg_fetch_object
- pg_fetch_result
- pg_fetch_row
- pg_field_is_null
- pg_field_name
- pg_field_num
- pg_field_prtlen
- pg_field_size
- pg_field_table
- pg_field_type_oid
- pg_field_type
- pg_flush
- pg_free_result
- pg_get_notify
- pg_get_pid
- pg_get_result
- pg_host
- pg_insert
- pg_last_error
- pg_last_notice
- pg_last_oid
- pg_lo_close
- pg_lo_create
- pg_lo_export
- pg_lo_import
- pg_lo_open
- pg_lo_read_all
- pg_lo_read
- pg_lo_seek
- pg_lo_tell
- pg_lo_truncate
- pg_lo_unlink
- pg_lo_write
- pg_meta_data
- pg_num_fields
- pg_num_rows
- pg_options
- pg_parameter_status
- pg_pconnect
- pg_ping
- pg_port
- pg_prepare
- pg_put_line
- pg_query_params
- pg_query
- pg_result_error_field
- pg_result_error
- pg_result_seek
- pg_result_status
- pg_select
- pg_send_execute
- pg_send_prepare
- pg_send_query_params
- pg_send_query
- pg_set_client_encoding
- pg_set_error_verbosity
- pg_socket
- pg_trace
- pg_transaction_status
- pg_tty
- pg_unescape_bytea
- pg_untrace
- pg_update
- pg_version
Коментарии
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
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.
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.
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;