文件首頁
MySQL 8.4 C API 開發者指南
下載本手冊
PDF (US Ltr) - 1.4Mb
PDF (A4) - 1.4Mb


MySQL 8.4 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() 回呼。

傳回值

無。

錯誤

無。