27.7.6.69 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);

Description

此函数安装要在执行本地加载数据语句期间使用的回调。它使应用程序可以控制本地(Client 端)数据文件的读取。这些参数是连接处理程序,一组指向回调函数的指针,以及一个指向这些回调可用来共享信息的数据区域的指针。

要使用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是回调可以读取并存储在缓冲区中的最大字节数。 (它可以读取较少的字节,但不应读取更多.)

返回值是读取的字节数,如果无法读取更多数据,则返回零(这 table 示 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是缓冲区的长度。将消息写为以空字符结尾的字符串,最长为error_msg_len -1 个字节。

返回值是错误号。

通常,其他回调将错误消息存储在ptr指向的数据结构中,以便local_infile_error()可以将错误消息从那里复制到error_msg

在 C 代码中调用mysql_set_local_infile_handler()并将指针传递给回调函数之后,您可以发出本地加载数据语句(例如,使用mysql_query())。Client 端库自动调用您的回调。 本地加载数据中指定的文件名将作为第二个参数传递给local_infile_init()回调。

Return Values

None.

Errors

None.