<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 31.11\. 各種函數 一如往常,也有一些函數,只是不是在任何地方都適合。 `PQfreemem` 釋放libpq分配的內存。 ``` void PQfreemem(void *ptr); ``` 釋放libpq分配的內存,尤其是`PQescapeByteaConn`, `PQescapeBytea`,`PQunescapeBytea`和`PQnotifies`。 尤其重要的是,在Windows系統上使用這個函數,而不是`free()`。 這是因為只有DLL和應用程序的多線程/單線程,發布/調試,靜態/動態標志是相同的時, 才在一個DLL中分配內存,并在應用程序工作時釋放內存。在非Windows平臺上, 這個函數與標準庫函數`free()`相同。 `PQconninfoFree` 釋放`PQconndefaults`或`PQconninfoParse`分配的數據結構。 ``` void PQconninfoFree(PQconninfoOption *connOptions); ``` 一個簡單的`PQfreemem`不會這樣做,因為數組包含對子字符串的引用。 `PQencryptPassword` 準備一個PostgreSQL密碼的加密形式: ``` char * PQencryptPassword(const char *passwd, const char *user); ``` 這個函數旨在用于那些發送類似于`ALTER USER joe PASSWORD 'pwd'`命令的客戶端應用程序。 這是一個很好的方法,這種命令不發送原始的明文密碼,因為它可能被暴露在命令日志,活動顯示中等等。 相反,在發送前,使用這個函數可以將密碼轉換為加密的形式。參數是明文密碼和用戶的SQL名字。 返回值是`malloc`分配的一個字符串,或超出內存時為`NULL`。 調用可以認為字符串中不包含需要逃逸的特殊字符。當使用結束之后,用`PQfreemem`進行釋放。 `PQmakeEmptyPGresult` 用給定的狀態構造一個空`PGresult`對象。 ``` PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status); ``` 這是libpq的內部函數,用于分配和初始化一個空`PGresult`對象。 如果不能分配內存,那么這個函數返回`NULL`。這是輸出, 因為一些應用程序發現它可以有效的生成結果對象本身(特別是帶有錯誤狀態的對象)。 如果`conn`非空,并且`status`用于表示一個錯誤, 那么指定連接的當前錯誤信息被復制到`PGresult`中。同時, 如果`conn`非空,那么連接中的任何事件過程會被復制到 `PGresult`中。(它們不會獲得`PGEVT_RESULTCREATE`請求, 但會看到`PQfireResultCreateEvents`)。需要注意的是隨著libpq 本身返回`PGresult`時,對象最后應該請求`PQclear`。 `PQfireResultCreateEvents` 為`PGresult`對象中的每個事件過程觸發一個`PGEVT_RESULTCREATE`事件 (參閱[Section 31.13](#calibre_link-2039))。成功時返回非0,如果任何事件過程失敗返回0。 ``` int PQfireResultCreateEvents(PGconn *conn, PGresult *res); ``` `conn`被傳送給事件過程,但不會被直接使用。如果事件過程不使用它,則會返回`NULL`。 已經接收到這個對象的`PGEVT_RESULTCREATE`或`PGEVT_RESULTCOPY` 事件的事件過程不會被再次觸發。 這個函數與`PQmakeEmptyPGResult`分開的主要原因是它經常創建一個 `PGresult`,并且在調用事件過程之前就用數據對其進行填充。 `PQcopyResult` 完成一個`PGresult`對象的拷貝。這個拷貝不會以任何方式來連接到資源結果, 并且當該拷貝不再需要時,需要調用`PQclear`進行清理。如果函數失敗,返回`NULL`。 ``` PGresult *PQcopyResult(const PGresult *src, int flags); ``` 不會制作一個明確的拷貝。返回的結果通常會是`PGRES_TUPLES_OK`狀態, 并且不會拷貝資源中的錯誤信息,然而會拷貝命令狀態字符串。`flags` 決定其他需要拷貝的。通常是幾個`PG_COPYRES_ATTRS`的按位或。 `PG_COPYRES_ATTRS`聲明復制源結果的屬性(列定義)。 `PG_COPYRES_TUPLES`聲明復制源結果的元組(這意味著也復制屬性)。 `PG_COPYRES_NOTICEHOOKS`聲明復制源結果的通知陷阱。 `PG_COPYRES_EVENTS`聲明負值源結果的事件。(但任何與源關聯的實例數據不會被復制。) `PQsetResultAttrs` 設置`PGresult`對象的屬性。 ``` int PQsetResultAttrs(PGresult *res, int numAttributes, PGresAttDesc *attDescs); ``` 提供的`attDescs`被復制到結果中。如果`attDescs` 指針為`NULL`,或`numAttributes`小于1,那么請求將被忽略, 并且函數成功。如果`res`已經有了屬性,那么函數會失敗。如果函數失敗, 會返回0。如果函數成功,會返回非0。 `PQsetvalue` 設置`PGresult`對象的元組字段值。 ``` int PQsetvalue(PGresult *res, int tup_num, int field_num, char *value, int len); ``` 這個函數會自動按需增加結果的內置元組。然而,`tup_num` 參數必須小于等于`PQntuples`,意味著這個函數一次只能增加一個元組。 但已存在的任意的元組中的任意字段可以以任意順序進行調整。如果`field_num` 中的一個值已經存在,會被覆蓋重寫。如果`len`是-1,或`value` 是`NULL`,字段值會被設置為一個SQL空值。`value` 被復制到結果的私有存儲中,因此函數返回結果后就不再需要了。如果函數失敗,會返回0。 如果函數成功,會返回非0。 `PQresultAlloc` 為`PGresult`對象分配子存儲。 ``` void *PQresultAlloc(PGresult *res, size_t nBytes); ``` 當`res`被清理時,該函數分配的內存也會被釋放掉。如果函數失敗, 返回`NULL`。結果是保證任何類型的數據能夠充分對齊,如同對`malloc`一樣。 `PQlibVersion` 返回正在使用的libpq的版本。 ``` int PQlibVersion(void); ``` 如果特定的功能在libpq當前加載的版本中可用,那么用于決定運行時此函數的結果。 該函數可以使用,比如,用來確定可用于`PQconnectdb`的連接選項, 或者是否支持PostgreSQL 9.0中添加的`hex` `bytea`輸出。 數字是通過把主、次及版本號轉換成兩位十進制數并且把它們連接在一起組成的。例如, 版本9.1將被返回901000,版本9.1.2將被返回90102(前導零沒有顯示)。 > **Note:** 這個函數是在PostgreSQL版本9.1中出現的,所以它不能用來在較早的版本中檢測所需功能, 因此連接它將在版本9.1上創建一個連接依賴。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看