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