pg_transaction_status

(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 设置为关闭的情况下会给出错误的结果。服务器端的自动提交功能已被弃用,在更高版本的服务器中不存在。

参数

connection

一个 PgSql\Connection 实例。

返回值

状态可以是 PGSQL_TRANSACTION_IDLE(当前空闲)、PGSQL_TRANSACTION_ACTIVE(正在执行命令)、PGSQL_TRANSACTION_INTRANS(空闲,处于有效的事务块中),或 PGSQL_TRANSACTION_INERROR(空闲,处于失败的事务块中)。如果连接不好,则报告 PGSQL_TRANSACTION_UNKNOWNPGSQL_TRANSACTION_ACTIVE 仅在查询已发送到服务器但尚未完成时报告。

变更日志

版本 描述
8.1.0 现在 connection 参数需要一个 PgSql\Connection 实例;以前需要一个 资源

示例

示例 #1 pg_transaction_status() 示例

<?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';
}
?>

添加注释

用户贡献的注释 2 个注释

r dot grellmann at agentmulder dot de
2 年前
在使用异步函数之一(pg_send_query()、pg_send_query_params()...)后,pg_transaction_status() 将始终报告 PGSQL_TRANSACTION_ACTIVE,无论是否启动了事务。
即使在对 pg_get_result() 的第一个调用(或所有有效调用)之后,事务状态也将保持为 PGSQL_TRANSACTION_ACTIVE,直到:
- 使用了像 pq_query() 这样的同步函数,或者
- 对 pg_get_result() 的另一个调用返回 false。
注意:调用 pg_free_result() 不会改变任何东西。

<?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
18 年前
此函数是用 C 语言实现的,因此无法在 PHP 的旧版本中用 SQL 模拟它。但是,您可以使用包装器来模拟部分功能,该包装器跟踪您何时开始和提交/回滚事务。
To Top