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,这样可以节省带宽。