pg_transaction_status

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

pg_transaction_statusReturns the current in-transaction status of the server

说明

pg_transaction_status ( PgSql\Connection $connection ) : int

Returns the current in-transaction status of the server.

Caution

pg_transaction_status() will give incorrect results when using a PostgreSQL 7.3 server that has the parameter autocommit set to off. The server-side autocommit feature has been deprecated and does not exist in later server versions.

参数

connection

An PgSql\Connection instance.

返回值

The status can be PGSQL_TRANSACTION_IDLE (currently idle), PGSQL_TRANSACTION_ACTIVE (a command is in progress), PGSQL_TRANSACTION_INTRANS (idle, in a valid transaction block), or PGSQL_TRANSACTION_INERROR (idle, in a failed transaction block). PGSQL_TRANSACTION_UNKNOWN is reported if the connection is bad. PGSQL_TRANSACTION_ACTIVE is reported only when a query has been sent to the server and not yet completed.

更新日志

版本 说明
8.1.0 The connection parameter expects an PgSql\Connection instance now; previously, a 资源(resource) was expected.

范例

Example #1 pg_transaction_status() example

<?php
  $dbconn 
pg_connect("dbname=publisher") or die("Could not connect");
  
$stat pg_transaction_status($dbconn);
  if (
$stat === PGSQL_TRANSACTION_UNKNOWN) {
      echo 
'Connection is bad';
  } else if (
$stat === PGSQL_TRANSACTION_IDLE) {
      echo 
'Connection is currently idle';
  } else {
      echo 
'Connection is in a transaction state';
  }    
?>

User Contributed Notes

r dot grellmann at agentmulder dot de 23-Oct-2021 02:17
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.

<?php
  $conn
= 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 17-Jul-2006 07:27
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.
PHP8中文手册 站长在线 整理 版权归PHP文档组所有