文件首頁
MySQL 9.0 C API 開發人員指南
下載本手冊
PDF (美式信紙) - 1.4Mb
PDF (A4) - 1.4Mb


MySQL 9.0 C API 開發人員指南  /  ...  /  mysql_set_local_infile_handler()

5.4.78 mysql_set_local_infile_handler()

void
mysql_set_local_infile_handler(MYSQL *mysql,
  int (*local_infile_init)(void **, const char *, void *),
  int (*local_infile_read)(void *, char *, unsigned int),
  void (*local_infile_end)(void *),
  int (*local_infile_error)(void *, char*, unsigned int),
  void *userdata);

說明

此函式安裝回呼,以在執行 LOAD DATA LOCAL 陳述式期間使用。它使應用程式能夠控制本機(用戶端)資料檔案讀取。引數是連線處理常式、一組指向回呼函式的指標,以及一個指向回呼可以用來共用資訊的資料區域的指標。

若要使用 mysql_set_local_infile_handler(),您必須撰寫以下回呼函式

int
local_infile_init(void **ptr, const char *filename, void *userdata);

初始化函式。此函式會呼叫一次以執行任何必要的設定、開啟資料檔案、配置資料結構等等。第一個 void** 引數是指向指標的指標。您可以將該指標 (即 *ptr) 設定為將傳遞給每個其他回呼的值 (作為 void*)。回呼可以使用此指向的值來維護狀態資訊。userdata 引數是傳遞給 mysql_set_local_infile_handler() 的相同值。

使初始化函式在成功時傳回零,在發生錯誤時傳回非零值。

int
local_infile_read(void *ptr, char *buf, unsigned int buf_len);

資料讀取函式。此函式會重複呼叫以讀取資料檔案。buf 指向儲存讀取資料的緩衝區,而 buf_len 是回呼可以讀取並儲存在緩衝區中的最大位元組數。(它可以讀取較少的位元組,但不應讀取更多。)

傳回值是讀取的位元組數,或當無法讀取更多資料時為零(表示 EOF)。如果發生錯誤,則傳回小於零的值。

void
local_infile_end(void *ptr)

終止函式。在 local_infile_read() 傳回零 (EOF) 或錯誤之後,此函式會呼叫一次。在此函式中,釋放由 local_infile_init() 配置的任何記憶體,並執行任何其他必要的清除。即使初始化函式傳回錯誤,也會叫用此函式。

int
local_infile_error(void *ptr,
                   char *error_msg,
                   unsigned int error_msg_len);

錯誤處理函式。此函式會呼叫以取得文字錯誤訊息,以便在任何其他函式傳回錯誤時傳回給使用者。error_msg 指向寫入訊息的緩衝區,而 error_msg_len 是緩衝區的長度。將訊息寫為以 Null 結尾的字串,最大長度為 error_msg_len−1 個位元組。

傳回值是錯誤編號。

通常,其他回呼會將錯誤訊息儲存在 ptr 指向的資料結構中,以便 local_infile_error() 可以將訊息從該處複製到 error_msg

在 C 程式碼中呼叫 mysql_set_local_infile_handler() 並傳遞指向回呼函式的指標後,您可以發出 LOAD DATA LOCAL 陳述式(例如,使用 mysql_real_query()mysql_query())。用戶端程式庫會自動叫用您的回呼。LOAD DATA LOCAL 中指定的檔案名稱將作為第二個參數傳遞給 local_infile_init() 回呼。

傳回值

無。

錯誤

無。