PHP 8.0.26 Released!


(PHP 5 >= 5.1.0, PHP 7, PHP 8)

pg_transaction_status Возвращает текущее состояние транзакции на сервере


pg_transaction_status(PgSql\Connection $connection): int

Возвращает текущее состояние транзакции на сервере.


pg_transaction_status() выдаёт некорректный результат при работе с сервером PostgreSQL 7.3, на котором выключена опция autocommit. Автоматическое завершение транзакций на стороне сервера устарело и не используется в более поздних версиях.

Список параметров


Экземпляр PgSql\Connection.

Возвращаемые значения

Список возможных состояний: PGSQL_TRANSACTION_IDLE (сервер бездействует), PGSQL_TRANSACTION_ACTIVE (выполняется запрос), PGSQL_TRANSACTION_INTRANS (сервер бездействует, работа в режиме транзакции), или PGSQL_TRANSACTION_INERROR (сервер бездействует, транзакция потерпела неудачу). PGSQL_TRANSACTION_UNKNOWN - ошибка подключения. PGSQL_TRANSACTION_ACTIVE возвращается только когда запрос уже отправлен на сервер, но ещё не обработан.

Список изменений

Версия Описание
8.1.0 Параметр connection теперь ожидает экземпляр PgSql\Connection; ранее ожидался ресурс (resource).


Пример #1 Пример использования pg_transaction_status()

pg_connect("dbname=publisher") or die("Подключиться не удалось");
$stat pg_transaction_status($dbconn);
  if (
'Соединение не удалось';
  } else if (
'Соединение свободно и простаивает';
  } else {
'Соединение в режиме транзакции';

add a note

User Contributed Notes 2 notes

r dot grellmann at agentmulder dot de
1 year ago
After one of the asynchronous functions (pg_send_query(), pg_send_query_params()...) has been used, pg_transaction_status() will always report PGSQL_TRANSACTION_ACTIVE, no matter if a transaction was started or not.
Even after the first call (or all valid calls) to pg_get_result() the transaction status will stay PGSQL_TRANSACTION_ACTIVE, until either
- a synchronous function like pq_query() was used, or
- another call to pg_get_result() was made, which returns false.
Note: calling pg_free_result() does not change anything.

= pg_connect("dbname=publisher") or die("Could not connect");
$status = pg_transaction_status($conn); // PGSQL_TRANSACTION_IDLE
pg_send_query($conn, 'SELECT 1');
$status = pg_transaction_status($conn); // PGSQL_TRANSACTION_ACTIVE
$res = pg_get_result($conn);
$status = pg_transaction_status($conn); // PGSQL_TRANSACTION_ACTIVE
$res = pg_get_result($conn); // false
$status = pg_transaction_status($conn); // PGSQL_TRANSACTION_IDLE
btherl at yahoo dot com dot au
16 years ago
This function is implemented in C, so there's no way to mimic it in SQL for older versions of PHP.  But you can mimic some of the functionality by using a wrapper which keeps track of when you begin and commit/rollback transactions.
To Top