PHP操作postgreSQL的状态判断

1、PHP链接postgreSQL的判断:

$dbconn = pg_connect("host=xxx port=5432 dbname=xxx user=xxx password=xxx");
$stat = pg_connection_status($dbconn);
if ($stat ===   PGSQL_CONNECTION_OK ) {
    echo "PGSQL_CONNECTION_OK<br>";
} else {
    echo "PGSQL_CONNECTION_BAD<br>";
}

pg_connecg()函数本身,如果成功则返回连接资源,如果不能连接则返回 FALSE。所以可以判断申请的链接是好是坏,如果是好的继续执行,不好继续可以申请链接资源号。

2、PHP在postgreSQL上执行SQL的判断:

pg_query() 在查询可以执行时返回查询结果资源号。如果查询失败或者提供的连接号无效则返回 FALSE。如果连接号有效,则可以用 pg_last_error() 函数来提取详细的错误信息。pg_query() 发送一条 SQL 语句到 connection 资源指定的 PostgreSQL 数据库。connection 必须是由 pg_connect() 或 pg_pconnect() 返回的合法连接号。
可以使用pg_result_status() 返回该查询结果资源的状态。可能的返回值有 PGSQL_EMPTY_QUERY,PGSQL_COMMAND_OK,PGSQL_TUPLES_OK,PGSQL_COPY_TO,PGSQL_COPY_FROM,PGSQL_BAD_RESPONSE,PGSQL_NONFATAL_ERROR 和 PGSQL_FATAL_ERROR。
可以执行的结果查看是否成功:

$resource = pg_query($dbconn, $sql);
if ($resource === FALSE) {
    print_r("FALSE<br>");
    $msg = pg_result_error($resource); 
    print_r($msg."<br>");
}

$st = pg_result_status($resource);
    print_r($st."<br>");
    if ($st === PGSQL_EMPTY_QUERY ) { // 0
        print_r ("PGSQL_EMPTY_QUERY<br>");
    } else if ($st === PGSQL_COMMAND_OK ){ // 1
        print_r ("PGSQL_COMMAND_OK<br>");
    } else if ($st === PGSQL_TUPLES_OK ){ // 2
        print_r ("PGSQL_TUPLES_OK<br>");
    } else if ($st === PGSQL_COPY_TO ){ // 3
        print_r ("PGSQL_COPY_TO<br>");
    } else if ($st === PGSQL_COPY_FROM ){ // 4
        print_r ("PGSQL_COPY_FROM<br>");
    } else if ($st === PGSQL_BAD_RESPONSE ){ // 5
        print_r ("PGSQL_BAD_RESPONSE<br>");
    } else if ($st === PGSQL_NONFATAL_ERROR ){ // 6
        print_r ("PGSQL_NONFATAL_ERROR<br>");
    } else if ($st === PGSQL_FATAL_ERROR ){ // 7
        print_r ("PGSQL_FATAL_ERROR<br>");
    }

这些状态对应定义的值为:

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   #失败

3、解决update语句或insert语句执行想要知道是否执行成功,就可以使用如上的判断逻辑,还有一种方法就是在执行的SQL上加上RETURNING * 或 RETRUNING ID 或 RETRUNING xxxx (”xxx“代指表的某字段),如果有返回结果,就说明执行成功,如果仅仅是想知道执行是否执行成功,最好使用判断资源号状态的方法,否则使用RETRUN xxx会占一些的带宽,假如一个数据库的访问量比较大时,会引发数据库访问慢,资源号不够用,或者出现其他问题。建议尽量减少使用RETRUNING XXX,这样可以节省带宽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值