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_TUPLES_CHUNK
、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 "复制开始.";
else
echo "复制失败.";
?>
以上示例将输出
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);// 默认使用长整型
// 并运行一个检查,例如
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);
// 得到类似元组确定这样的结果,所以我建议只使用默认的长整型
?>
或使用您认为合适的任何条件检查
如果您的程序“意外地”将 pg_result_status 传递了一个不是实际 pg 资源的变量,它将返回一个空字符串。
(如果您想在尝试对它进行某些操作之前确保 pg 资源是“好的”,则了解这一点很重要)。
PostgreSQL 文档指出 PHP 永远不应该返回 PGRES_NONFATAL_ERROR。
“PQexec 或其他查询执行函数永远不会直接返回状态为 PGRES_NONFATAL_ERROR 的结果” https://postgresql.ac.cn/docs/current/static/libpq-exec.html
因此,您无法使用此函数来检查此查询是否产生了通知。