1. 程式人生 > >PHP操作postgreSQL的狀態判斷

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,這樣可以節省頻寬。