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