?
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
服務(wù)器生成的注意信息和警告信息都不會由查詢執(zhí)行函數(shù)返回,因為他們并不蘊涵這查詢的失敗。 它們會被傳遞給一個注意信息處理函數(shù),然后在該處理返回之后繼續(xù)正常執(zhí)行。 缺省的注意信息處理函數(shù)在stderr上打印該信息, 但是應(yīng)用可以通過提供自己的處理函數(shù)來覆蓋這個行為。
猶豫歷史原因,系統(tǒng)里存在兩個級別的注意信息處理,分別叫做注意信息接收器和注意信息處理器。 缺省的行為是注意信息接收器格式化注意信息然后給注意信息處理器傳遞一個字串進行打印。 不過,對于自行處理這些事情的應(yīng)用而言,通常是忽略注意信息處理器層, 而只是在注意信息接收器里完成所有動作。
函數(shù)PQsetNoticeReceiver
為一個連接對象設(shè)置或者檢查當前的注意信息接收器。
類似的是PQsetNoticeProcessor
設(shè)置或者檢查當前的注意信息處理器。
typedef void (*PQnoticeReceiver) (void *arg,const PGresult *res); PQnoticeReceiver PQsetNoticeReceiver(PGconn *conn, PQnoticeReceiver proc, void *arg); typedef void (*PQnoticeProcessor) (void *arg,const char *message); PQnoticeProcessor PQsetNoticeProcessor(PGconn *conn, PQnoticeProcessor proc, void *arg);
這些函數(shù)逗返回前一個注意信息接收器或者處理器函數(shù)指針,然后設(shè)置新的數(shù)值。 如果你提供一個空函數(shù)指針,那么就不會執(zhí)行任何動作,但是返回當前指針。
當我們從服務(wù)器獲取一個注意或者警告信息的時候,或者是收到libpq內(nèi)部生成的類似信息時,
注意信息接收器函數(shù)將被調(diào)用。消息會以一個PGRES_NONFATAL_ERROR的PGresult. 的形式傳遞。
(這就允許接收器用PQresultErrorField
抽取獨立的字段,
或者用PQresultErrorMessage
完成預(yù)先格式化好的信息。)
傳遞給PQsetNoticeReceiver
的同一個 void 指針也同樣傳遞給該函數(shù)。
(必要時,這個指針可以用來訪問應(yīng)用相關(guān)的狀態(tài)。)
缺省的注意信息接收器只是簡單的抽取信息(使用PQresultErrorMessage
)然后傳遞給注意信息處理器。
注意信息處理器負責處理一個以文本形式給出的注意或者警告信息。系統(tǒng)傳遞給他消息的
字串文本(包括結(jié)尾的新行符),加上一個和傳遞給PQsetNoticeProcessor
一樣的 void (無類型)指針。
(必要時,這個指針可以用來訪問應(yīng)用相關(guān)的狀態(tài)。)
缺省的注意信息處理器就是
static void defaultNoticeProcessor(void *arg,const char *message) { fprintf(stderr,"%s",message); }
一旦你設(shè)置了注意消息接收器或者處理器,那么你就應(yīng)該準備好在PGconn對象
或者PGresult對象開始存在的時候起就有人調(diào)用它們。在創(chuàng)建PGresult的時候,
PGconn的當前注意信息處理指針被拷貝到PGresult,
以便被類似PQgetvalue
這樣的函數(shù)使用。