?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
一如往常,也有一些函數(shù),只是不適合在任何地方
PQfreemem
釋放libpq分配的內(nèi)存
void PQfreemem(void *ptr);
釋放libpq分配的內(nèi)存,尤其是PQescapeByteaConn
,
PQescapeBytea
,PQunescapeBytea
和PQnotifies
。
尤其重要的是,在Windows系統(tǒng)上使用這個函數(shù),而不是free()
。
這是因為只有當(dāng)多線程/單線程,發(fā)布/調(diào)試,靜態(tài)/動態(tài)標(biāo)志是相同的DLL和應(yīng)用程序時,在一個DLL中分配內(nèi)存,在應(yīng)用程序工作時釋放內(nèi)存。
在非Windows平臺上,這個函數(shù)與標(biāo)準(zhǔn)庫函數(shù)free()
相同。
PQconninfoFree
釋放PQconndefaults
或PQconninfoParse
分配的數(shù)據(jù)結(jié)構(gòu)。
void PQconninfoFree(PQconninfoOption *connOptions);
一個簡單的PQfreemem
不會這樣做,因為數(shù)組包含對子字符串的引用。
PQencryptPassword
準(zhǔn)備一個PostgreSQL密碼的加密形式:
char * PQencryptPassword(const char *passwd,const char *user);
這個函數(shù)旨在用于那些發(fā)送類似于ALTER USER joe PASSWORD 'pwd'命令的客戶端應(yīng)用程序。
這是一個很好的方法,這種命令不發(fā)送原始的明文密碼,因為它可能被暴露在命令日志,活動顯示等等。
相反,在發(fā)送前個,使用這個函數(shù)可以將密碼轉(zhuǎn)換為加密的形式。
這個參數(shù)在使用中是明文密碼,和用戶的SQL名。返回值是malloc
分配,或超出內(nèi)存時NULL分配的
字符串。調(diào)用可以認(rèn)為字符串中不包含需要逃逸的特殊字符。當(dāng)使用結(jié)束之后,用PQfreemem
進行釋放。
PQmakeEmptyPGresult
用給定的狀態(tài),構(gòu)造一個空PGresult對象。
PGresult *PQmakeEmptyPGresult(PGconn *conn,ExecStatusType status);
這是libpq內(nèi)部函數(shù)用于分配和初始化一個空PGresult對象。
如果不能分配內(nèi)存,那么這個函數(shù)返回NULL。
對一些應(yīng)用程序而言,它可以有效的返回生成的結(jié)果對象本身(特別是對象帶有錯誤狀態(tài))。
如果conn非空,并且status用于表示一個錯誤,那么指定連接的當(dāng)前錯誤信息
被復(fù)制到PGresult中。同時,如果conn非空,那么連接中的
任何事件過程會被復(fù)制到PGresult中。
(它們不會獲得PGEVT_RESULTCREATE請求,但會看到PQfireResultCreateEvents
)。
需要注意的是隨著libpq本身返回PGresult時,對象最后應(yīng)該請求PQclear
。
PQfireResultCreateEvents
為PGresult對象中的每個事件過程觸發(fā)一個PGEVT_RESULTCREATE事件(參閱Section 31.12)。 成功時返回非0,否則返回0。
int PQfireResultCreateEvents(PGconn *conn,PGresult *res);
conn被傳送給事件過程,但不會被直接使用。 如果事件過程不使用它,則會返回NULL。
已經(jīng)接收到這個對象的PGEVT_RESULTCREATE或PGEVT_RESULTCOPY事件的事件過程 不會被再次觸發(fā)。
這個函數(shù)與PQmakeEmptyPGResult
分開的主要原因是
它經(jīng)常創(chuàng)建一個PGresult,并且在調(diào)用事件過程之前就用數(shù)據(jù)對其進行填充。
PQcopyResult
完成一個PGresult對象的拷貝。
這個拷貝不會以任何方式來連接到資源結(jié)果,并且當(dāng)該拷貝不在需要時,需要調(diào)用PQclear
進行清理。
如果函數(shù)失敗,返回NULL。
PGresult *PQcopyResult(const PGresult *src,int flags);
不會制作一個明確的拷貝。返回的結(jié)果通常會是PGRES_TUPLES_OK狀態(tài), 并且不會拷貝資源中的錯誤信息,然而會拷貝命令狀態(tài)字符串。flags決定 其他需要拷貝的。通常是一個按位或幾個flags。 PG_COPYRES_ATTRS聲明復(fù)制源結(jié)果的屬性(列定義)。 PG_COPYRES_TUPLES聲明復(fù)制源結(jié)果的元組(這意味著也復(fù)制屬性。)。 PG_COPYRES_EVENTS聲明復(fù)制源結(jié)果的時間(但任何實例關(guān)聯(lián)的數(shù)據(jù)源不會被復(fù)制。)。
PQsetResultAttrs
設(shè)置PGresult對象屬性。
int PQsetResultAttrs(PGresult *res,int numAttributes,PGresAttDesc *attDescs);
提供的attDescs被復(fù)制到結(jié)果中。 如果attDescs指針為NULL,或numAttributes小于1, 那么請求將被忽略,并且函數(shù)成功。如果res已經(jīng)有了屬性,那么函數(shù)會失敗。 如果函數(shù)失敗,會返回0。如果函數(shù)成功,會返回非0。
PQsetvalue
設(shè)置PGresult對象的元組字段值。
int PQsetvalue(PGresult *res,int tup_num,int field_num,char *value,int len);
這個函數(shù)會自動按需增加結(jié)果的內(nèi)置元組。然而,tup_num參數(shù)必須
小于等于PQntuples
,意味著這個函數(shù)一次只能增加一個元組。
但已存在的任意的元組中的任意字段可以以任意順序進行調(diào)整。
如果field_num中的一個值已經(jīng)存在,會被覆蓋重寫。
如果len是-1,或value是NULL,
字段值會被設(shè)置為一個SQL空值。value被復(fù)制到結(jié)果的私有存儲中,
因此函數(shù)返回結(jié)果后就不再需要了。如果函數(shù)失敗,會返回0。如果函數(shù)成功,會返回非0。
PQresultAlloc
為PGresult對象分配子存儲。
void *PQresultAlloc(PGresult *res,size_t nBytes);
當(dāng)res被清理時,該函數(shù)分配的內(nèi)存也會被釋放掉。
如果喊叔叔失敗,返回NULL。結(jié)果是保證任何類型的數(shù)據(jù)能夠充分對齊,如同對malloc
一樣。