0 = PGSQL_EMPTY_QUERY
1 = PGSQL_COMMAND_OK
2 = PGSQL_TUPLES_OK
3 = PGSQL_COPY_TO
4 = PGSQL_COPY_FROM
5 = PGSQL_BAD_RESPONSE
6 = PGSQL_NONFATAL_ERROR
7 = PGSQL_FATAL_ERROR
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
pg_result_status — 获取查询结果的状态
pg_result_status() 返回 PgSql\Result 实例的状态,或者与结果关联的 PostgreSQL 命令完成标签。
result
一个 PgSql\Result 实例,由 pg_query()、pg_query_params() 或 pg_execute()(以及其他函数)返回。
mode
可以是 PGSQL_STATUS_LONG
返回 result
的数值状态,或者 PGSQL_STATUS_STRING
返回 result
的命令标签。如果未指定,默认值为 PGSQL_STATUS_LONG
。
如果指定了 PGSQL_STATUS_LONG
,则可能的返回值为 PGSQL_EMPTY_QUERY
、PGSQL_COMMAND_OK
、PGSQL_TUPLES_OK
、PGSQL_COPY_OUT
、PGSQL_COPY_IN
、PGSQL_BAD_RESPONSE
、PGSQL_NONFATAL_ERROR
和 PGSQL_FATAL_ERROR
。否则,返回包含 PostgreSQL 命令标签的 string。
版本 | 描述 |
---|---|
8.1.0 | result 参数现在期望一个 PgSql\Result 实例;以前期望的是 资源。 |
范例 #1 pg_result_status() 例子
<?php
// 连接到数据库
$conn = pg_pconnect("dbname=publisher");
// 执行一个 COPY
$result = pg_query($conn, "COPY authors FROM STDIN;");
// 获取结果状态
$status = pg_result_status($result);
// 确定状态
if ($status == PGSQL_COPY_IN)
echo "Copy began.";
else
echo "Copy failed.";
?>
上面的例子将输出
Copy began.
0 = PGSQL_EMPTY_QUERY
1 = PGSQL_COMMAND_OK
2 = PGSQL_TUPLES_OK
3 = PGSQL_COPY_TO
4 = PGSQL_COPY_FROM
5 = PGSQL_BAD_RESPONSE
6 = PGSQL_NONFATAL_ERROR
7 = PGSQL_FATAL_ERROR
此函数很有用,它可能不会返回完整的非致命错误,但您希望查看查询是否完成。
示例
<?PHP
// 连接到 pg 数据库
// 创建 PGSQL
$PGSTAT = pg_result_status($PGSQL);// 默认值为 long
// 并通过检查运行它,例如
if(($PGSTAT == 1) || ($PGSTAT == 2)){
// 用于查询结果;
}else if(($PGSTAT == 3) || ($PGSTAT == 4)){
// 用于复制结果;
}
if(($PGSTAT != 0) && ($PGSTAT != 5) && ($PGSTAT != 6) && ($PGSTAT != 7)){
// 您的代码;
}else{
// $ERRORS 代码;
}
// 到目前为止,对我来说这是最好的方法,我尝试使用
// 命令标签,但我似乎仍然得到数值结果
// 示例
//$PGSTAT = pg_result_status($PGSQL, PGSQL_COMMAND_OK);
// 得到类似于 tuples ok 的东西,所以我建议只使用默认的 long
?>
或使用您认为合适的任何条件检查
如果您的程序“意外地”将 pg_result_status 传递了一个不是实际 pg 资源的变量,它将返回一个空字符串。
(这很重要,如果您想确保 pg 资源“良好”,然后尝试对其进行某些操作)。
postgres 文档说 PHP 永远不应该返回 PGRES_NONFATAL_ERROR
"PQexec 或其他查询执行函数永远不会直接返回状态为 PGRES_NONFATAL_ERROR 的结果" https://postgresql.ac.cn/docs/current/static/libpq-exec.html
因此,您不能使用此函数来检查此查询是否产生了通知。