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
是缓冲区的长度。将消息写为空终止字符串,最多
error_msg_len
−1 个字节长。
返回值是错误号。
通常,其他回调将错误消息存储在 指向的数据结构中ptr
,以便
local_infile_error()
可以将消息从那里复制到 中error_msg
。
在调用
mysql_set_local_infile_handler()
C 代码并将指针传递给回调函数后,您可以发出一条
LOAD DATA
LOCAL
语句(例如,通过使用
mysql_real_query()
or
mysql_query()
)。客户端库会自动调用您的回调。中指定的文件名将LOAD
DATA LOCAL
作为第二个参数传递给local_infile_init()
回调。