头文件:#include<mysql.h>
C API数据类型:
下面是mysql.h头文件中的C API数据类型列表:
MYSQL
mysql_init()建立的数据库句柄结构,可使用mysql_close()释放内存。
MYSQL_RES
从SQL查询语句获取的查询结果集的结构。取回函数会用到这个数据类型,可使用mysql_free_result()释放内存。
MYSQL_ROW
该结构用于存放结果集的行数据。使用函数mysql_fetch_row()可检索该结构中的数据。
MYSQL_FIELD
该结构用于存放结果集中的字段信息。经过函数mysql_fetch_field()能够建立存放字段信息的数组。数组元素包括缺省的name、table以及def。
MYSQL_FIELD_OFFSET
该类型用于记录结果集指针偏移位置。函数mysql_row_tell()可取得偏移量,函数mysql_row_seek()能够这个数据类型。
my_ulonglong
可变类型,用于存放从如下函数获取的行数,如MySQL_ffected_rowsa()、mysql_num_rows()以及mysql_insert_id()。可以使用这个类型打印变量的值,将值复制到其余的无符号长整型变量中。
C函数API
一、mysql_affected_rows():
my_ulonglong mysql_affected_rows(MYSQL*mysql);
返回最近查询中受影响的记录行数。INSERT、UPDATE、DELETE语句执行后,可使用该函数获取上述语句受影响的行数。对于不涉及到行数的语句,函数返回值为0.若是发生错误,返回-1.
二、mysql_autocommit()
my_bool mysql_autocommit(MYSQL* mysql,my_bool mode);
使用该函数能够启用或禁止自动提交模式。函数第二个参数的值为1,则启动服务器的自动提交模式,值为0则禁用自动提交模式。自动提交模式可令服务器在每一个INSERT、UPDATE或DELETE语句的事务执行完毕后自动更新数据库。默认启用自动提交模式。
三、mysql_change_user()
my_bool mysql_change_user(MYSQL* mysql,const char* uer,const char* password,const char* database);
使用该函数能够将当前MYSQL回话用户修改成第二参数指定的用户。因为该函数执行成功的同时会终止当前会话,因此须要重置默认数据库。所以,在函数的第四个参数中指定新链接使用的数据库。
四、mysql_character_set_name()
const char* mysql_character_set_name(MYSQL* mysql);
该函数返回服务器正在使用的默认字符集名称
五、mysql_close()
void mysql_close(MYSQL*mysql);
该函数关闭当前回话的数据库
六、mysql_commit()
my_bool mysql_commit(MYSQL* mysql);
该函数能够提交事务,函数执行后,INSERT、UPDATE以及DELETE语句的执行结果会被保存到数据库中,函数mysql_roolback()也不能取消这些操做。
函数执行成功返回0,失败返回一个非零值。
七、mysql_connect()
MYSQL* mysql_connect(MYSQL*mysql, const char* host,const char* user,const char* password);
该函数与mysql_real_connect()有所不一样。
八、mysql_create_db()
int mysql_create_db(MYSQL* mysql,const char* database);
该函数用于在MySQL句柄上建立一个新的数据库,函数第二参数给出新的数据库的名称。
不建议使用该函数,建议在查询语句中建立数据库或表。
九、mysql_data_seek()
void mysql_data_sek(MYSQL_RES* result, my_ulonglong offset);
该函数能够与mysql_store_result()以及取回结果集的函数(如mysql_fetch_row())结合使用,将取回结果的当前指正移动到函数第二个参数指定的偏移位置。mysql
mysql_query(mysql,"SELECT client_id, client_name FROM clients ORDER BY start_date"); result=mysql_store_result(mysql); num_rows=mysql_num_rows(result); mysql_data_seek(result,(num_rows-8)); while((row=mysql_fetch_row(result))!=NULL) { printf("%s(%s)\n",row[1],row[0]); }
显示查询结果的后8行数据
十、mysql_debug()
void mysql_debug(const char*debug);
若是客户机库已经编译并支持调试,可以使用该函数建立跟踪调试文件。
十一、mysql_drop_db()
int mysql_drop_db(MYSQL* mysql,const char* database);
该函数能够来删除MYSQL服务器中的数据库。函数的第二个参数给出须要删除的数据库名字。若是函数操做成功则返回0,失败返回1.
十二、mysql_dump_debug_info()
int mysql_dump_debug_info(MYSQL*mysql)
函数用于把当前链接的出错信息写进MySQL服务器的日志文件中。若是操做成功则返回0,若是操做失败则返回非零值。执行操做的用户必须有管理员权限。下面是该函数的示例程序:sql
…… if(!mysql_dump_debug_info(mysql)) {printf("Debugging Info.Written.\n");} ……
十二、mysql_eof()
my_bool mysql_eof(MYSQL*result)
MySQL_e o f()用于肯定是否取回告终果集中的最后一行记录。若是没有执行到结果集的最后一行则返回值0,不然返回一个非零值。
推荐使用该函数。可使用mysql_errno()、mysql_error()或mysql_more_results()代替该函数检测执行到最后一行记录的错误提示。
1四、mysql_errno()
unsigned int mysql_errno(MYSQL*mysql);
若是程序执行过程当中出现错误,该函数会返回最后一次调用API函数的出错代码。若是最后一次调用的函数执行成功,则该函数会返回一个0值。
1五、mysql_error()
char*mysql_error(MYSQL*mysql)
若是程序执行过程当中出现错误,该函数会返回最后一次调用API函数的出错信息。若是最后一次调用的函数成功执行,则该函数会返回一个空字符串。
1六、mysql_escape_string()
unsigned int mysql_escape_string(char*destination,const char*source,unsigned int length)
该函数使用反斜杠,对第二个参数给出的字符串进行转义,并返回转义后的结果。然而,由于安全上的问题,并不推荐使用这个函数。一般使用MySQL_real_escape_string()代替它;这个函数能够安全并且准确地完成任务。
1七、mysql_fetch_field()
MYSQL_FIELD* mysql_field(MYSQL_RES*result);
该函数返回结果集中指定字段的相关信息。如要获得全部字段的元数据,只要循环执行该函数便可。数据库
MYSQL_FIELD*field; …… mysql_query(mysql,"SELECT*FROM clients LIMIT 1"); result=mysql_store_result(mysql); while((field=mysql_fetch_field(result))!=NULL) {printf("%s\n",field->name);}
SELECT语句中的统配符选择了表中的全部列。所以经过循环语句可列出每列的名称。还有其余的一些可用属性,如field->table可得到表名,field->def可得到列的默认值。
1八、mysql_fetch_field_direct()
MYSQL_FIELD* mysql_fetch_field_direct(MYSQL_RES* result,unsigned int field_nbr);
这个函数返回了函数第一个参数执行结果集中指定字段的信息。函数的第二个参数用于指定字段。下面是函数的示例:express
…… MYSQL_FIELD*field; …… mysql_query(mysql,"SELECT*FROM clients LIMIT 1"); result=mysql_store_result(mysql); field=mysql_fetch_field_direct(result,0); printf("%s\n",field->name);
该函数和mysql_fetch_field()很类似,不一样之处在于函数可得到指定字段的信息。在上面的示例中,将显示第一个字段的名称(0表明第一个字段)。
1九、mysql_fetch_fields()
MYSQL_FIELD*mysql_fetch_fields(MYSQL_RES*result);
该函数返回一个存放结果集中字段信息的一个数组。
20、mysql_fetch_lengths()
unsigned long * mysql_fetch_lengths(MYSQL_RES*result);
该函数返回结果集中每一列的长度,每一行返回的值都是变化的。
2一、mysql_fetch_row()
MYSQL_ROW mysql_fetch_row(MYSQL_RES* result);
使用该函数能够取回结果集中的下一行。若是结果集中没有下一行可取,函数将返回NULL。
2二、mysql_field_seek()
MUYSQL_FIELD_OFFSET mysql_dield_seek(MYSQL_RES*res,MYSQL_FIELD_OFFSET offset);
该函数和mysql_fetch_field()联合使用,可将结果集中当前字段的指针移动号函数第二参数指定的便宜位置处。函数返回的偏移量,函数的第一个参数是结果集的指针。数组
mysql_query(mysql, sql_stmnt); MYSQL_FIELD_OFFSET offset=2; mysql_field_seek(result, offset); while((field=mysql_fetch_field(result))!=NULL) { printf("%d:%s\n",mysql_field_tell(result),field->name); } ……
在这个示例中使用了mysql_field_seek(),并将偏移量设置为2,结果集中的头二行被忽略。函数mysql_field_seek()用来肯定while循环语句中将显示的字段的索引。函数MySQL_field_seek()在执行前先返回偏移量。
2三、mysql_field_tell()
MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES*result);
2四、mysql_free_result()
void mysql_free_result(MYSQL_RES*result);
该函数释放函数分配的资源,
2五、mysql_get_client_info()
char* mysql_get_client_info(void);
该函数返回客户机的版本。
2六、mysql_get_character_set_info()
void mysql_get_character_set_info(MYSQL*mysql,MY_CHARACTER_INFO* cs);
该函数返回指定数据库的字符集信息,
它使用了MY_CHARSE_INFO结构,所以能够获得以下所示的扩展信息:缓存
…… if(!mysql_set_character_set(mysql,"utf8")) { MY_CHARSET_INFO ch_set; mysql_get_character_set_info(mysql,&ch_set); printf("Character Set:%s\n",ch_set.name); printf("Collation:%s\n",ch_set.csname); printf("Minimum Length for Multibyte Character:%d\n",ch_set.mbminlen); printf("Maximum Length for Multibyte Character:%d\n",ch_set.mbmaxlen); printf("Comment:%s\n",ch_set.comment); printf("Directory:%s\n",ch_set.dir); } ……
输出结果:
Character Set:utf8_general_ci
Collation:utf8
Minimum Length for Multibyte Character:1
Maximum Length for Multibyte Character:3
Comment:UTF-8 Unicode
Directory:(null)
27 、mysql_get_client_version()
unsigned long*mysql_get_client_version(void)
mysql_get_client_version()返回数字格式的客户机库版本。
2八、mysql_get_host_info()
char*mysql_get_host_info(MYSQL*mysql)
该函数返回主机名以及当前连接类型。
2九、mysql_get_proto_info()
unsigned int mysql_get_proto_info(MYSQL*mysql)
该函数返回当前连接的协议版本。
30、mysql_get_server_info()
char* mysql_get_server_info(MYSQL* mysql)
该函数返回一个包含服务器上当前连接的mysql版本信息的字符串。
3一、mysql_get_server_version()
unsigned long mysql_get_server_version(MYSQL*mysql)
该函数返回当前链接的服务器数值格式的版本信息。
3二、mysql_get_ssl_cipher()
const char* mysql_get_ssl_cipher(MYSQL*mysql)
该函数返回带有加密套接字(Security Socket Layer, SSL)密码名称的字符串,该名称用于给定的链接。若是没有使用密码,函数将返回NULL。
3三、mysql_hex_string()
unsigned long mysql_hex_string(char*to, const char*from, unsigned long length)
函数将十六进制的字符串转换成SQL语句可使用的格式。十六进制字符串将由程序中指针from指向的内容或变量给出。结果存放在变量to中,以NULL字节做为字符串的结束。Length是from指向内容的字节长度。变量to的长度值为length乘以2再加1。
3四、mysql_info()
char* mysql_info(MYSQL*mysql)
当执行了特定的SQL语句时,该函数会返回MySQL给出的信息字符串。
3五、mysql_init()
MYSQL* mysql_init(MYSQL*mysql);
该函数可分配并初始化用于链接数据库服务器MySQL对象.
若是函数的参数为NULL,库将从堆分配一个新对象;不然,将初始化用户指定的本地MYSQL对象。
返回值是指向对象的指针,若是获得的是NULL则表示分配对象或初始化操做失败。用这个指针调用函数mysql_close()不只释放链接相关资源,若是库在开始位置分配了对象,则也会释放对象自己。
一般使用库分配对象要比手动分配对象安全。当建立创建在库基础上的应用时,若是某些编译器选项失效,使用这种方式能够避免发生程序调试跟踪难的问题。
尽管该函数预备了一个数据库链接句柄,但并无链接数据库。
3六、mysql_insert_id()
my_ulonglong mysql_insert_id(MYSQL*mysql);
该函数返回在当前链接下,使用INSERT插入的最后一条记录的主键标识码。使用该函数的前提是,表中有AUTO_INCREMENT列,而且列值是自动分配的。不然函数将返回值0.
3七、mysql_kill()
int mysql_kill(MYSQL*mysql,unsigned long iderifer);
使用该函数能够结束服务器上运行的线程。能够经过函数的第二个参数指定线程的标识符。若是要结束当前链接,可使用带有会话句柄的函数mysql_thread_id()
若是要结束当前线程之外的其余线程,可使用函数myslq_list_processes()列出全部的线程,从中选出要终止的线程。
3八、mysql_library_end()
void mysql_library_end(void)
使用该函数能够在断开服务器的链接后关闭Mysq库,该函数也能够释放内存,也能够用于一般的客户机库或嵌入式服务器库。一般接mysql_library_init()结合使用
3九、mysql_library_init()
int mysql_library_init(int argc,char** argv,char** groups);
在调用其余MySQL函数以前,可以使用该函数初始化MySQL库、相关库以及系统。它能够做用于普通的客户机库或嵌入式服务器库。该函数可用于多线程环境下。另外,这个函数并非必需的,mysql_init()可完成相同功能。该函数执行完毕后,可使用mysql_library_end()关闭库。若是函数执行成功则返回零,不然返回非零值。
40、mysql_list_dbs()
MYSQL_RES* mysql_list_dbs(MYSQL*mysql,const char* wild)
该函数返回包含当前链接下服务器上全部数据库的集合。
4一、mysql_list_field()
MYSQL_RES*mysql_list_fields(MYSQL*mysql, const char*table,const char*wild)
函数返回包含指定表中全部的字段,函数的第二个参数指定要检索的表。第三个参数给出一个表达式,用于选择名字与其匹配的字段。%或_可做为通配符。若是第三个参数为NULL,则返回表中全部字段。执行结束后需释放结果集。
4二、mysql_list_processes()
MYSQL_RES*mysql_list_processes(MYSQL*mysql)
函数返回服务器上全部的MySQL服务器进程或服务器线程,函数的参数指定服务器句柄。
4三、mysql_list_tables()
MYSQL_RES*mysql_list_tables(MYSQL*mysql,const char*expression)
该函数返回指定数据库中的所有表。函数的第二个参数给出的表达式用于选择名字和表达式相匹配的表。%或_用做通配符。若是第二个参数为NULL,则会返回数据库中全部的表。
4四、mysql_more_results()
my_bool mysql_more_result(MYSQL*mysql);
当使用函数mysql_next_result()检索数据时,可以使用这个函数检测结果集中是否有更多结果。若是有更多的结果则返回1,不然返回0。
4五、mysql_next_result()
int mysql_next_result(MYSQL*mysql)
可以使用该函数从结果集中读取下一行数据。若是执行成功而且结果集中检索到更多的结果则返回0,若是检索数据成功,但没有更多的结果行可检索则返回-1。若是结果集没有数据返回会致使函数执行失败,则返回出错信息(或者返回非零值)。在调用该函数前可使用mysql_more_results()检查是否有多个结果。
4六、mysql_num_fields()
unsigned int mysql_num_fields(MYSQL_RES*result)
函数返回结果集中每一行的字段数。
4七、mysql_num_rows()
int mysql_num_rows(MYSQL_RES*result);
当mysql_store_result()执行完毕后,可以使用该函数返回结果集中的行数。若是在函数mysql_user_result()后使用,则在检索告终果集中全部行后,再返回行数。
4八、mysql_options()
int mysql_options(MYSQL* mysql,enum mysql_option option,const char* value);
在使用mysql_real_connect()或mysql_connect()创建链接前,可以使用该函数设置链接选项。在链接前能够屡次使用该函数设置额外的选项。能够经过函数的第二个参数指定链接选项。经过第三个参数给出与链接选项相关的值。
下面列举了函数第二个参数用到的选项,除此以外,在圆括号中还列举第三个参数的变量类型和值,以及每一个选项的简要介绍:安全
MYSQL_OPT_CONNECT_TIMEOUT(unsigned int*) 该选项设置链接超时的秒数。 MYSQL_OPT_READ_TIMEOUT(unsigned int*) 该选项设置在Windows系统下MySQL服务器读取信息超时的秒数。 MYSQL_OPT_WRITE_TIMEOUT(unsigned int*) 该选项设置在Windows系统下向MySQL服务器写入数据的超时的秒数。 MYSQL_OPT_COMPRESS(NULL) 该选项可设置客户机和服务器间的压缩通信,前提是两者都支持压缩通信。 MYSQL_OPT_LOCAL_INFILE(pointer to unsigned integer) 该选项做用于参数指向的文件。若是指针为NULL,则在链接时运行LOADLOCALINFILE语句。 MYSQL_OPT_NAMED_PIPE(NULL) 该选项指示客户机使用命名管道链接到Windows NT平台上的MySQL服务器。 MYSQL_INIT_COMMAND(char*) 该选项设置链接到MySQL服务器后要执行的查询,由函数的第三个参数指定查询语句。 MYSQL_READ_DEFAULT_FILE(char*) 该选项指示服务器读取配置文本文件,文件的名称在函数的第三个参数中给出,而不是读取客户机的缺省配置文件my.cnf。 MYSQL_READ_DEFAULT_GROUP(char*) 该选项命令服务器从缺省配置文件my.cnf或由函数的MYSQL_READ_DEFAULT_FILE选项指定的配置文件中读取服务器小节或组。 MYSQL_OPT_PROTOCOL(unsigned int*) 该选项指定默认的数据库链接协议。 MYSQL_SHARED_MEMORY_BASE_NAME(char*) 该选项命名了用于链接服务器的共享内存对象。
4九、mysql_ping()
int mysql_ping(MYSQL*mysql)
使用该函数可判断当前MYSQL链接是否处于开启状态。若是没有开启,函数将从新创建链接;若是链接是打开的或从新创建成功,则返回零;不然返回一个非零值。
50、mysql_query()
int mysql_query(MYSQL*mysql, const char*query)
该函数执行了SQL查询语句,SQL语句由函数的第二个参数给出。只能够给出一条SQL语句。若是查询包含二进制数据,则须要用mysql_real_query()代替该函数。若是函数执行成功则返回零,不然返回非零值。服务器
MYSQL*mysql; MYSQL_RES*result; MYSQL_ROW row; MYSQL_FIELD*field; int i, num_fields; …… mysql=mysql_init(NULL); mysql_real_connect(mysql, host, user, password, database,0,NULL,0); const char*sql_stmnt="SELECT*FROM workreq"; mysql_query(mysql, sql_stmnt, bytes); result=mysql_store_result(mysql); num_fields=mysql_field_count(mysql); while((row=mysql_fetch_row(result))!=NULL) { for(i=0;i<num_fields;i++) {printf("%s,",row[i]);} printf("\n"); } mysql_free_result(result); mysql_close(mysql);
51、mysql_real_connect()
MYSQL*mysql_real_connect(MYSQL*mysql, const char*host, const char*user, const char*password, const char*user, const char*password, const char*database, uint port, const char*user, const char*password, const char*database, uint port, const char*unix_socket, uint flag)
使用该函数可创建MySQL服务器链接。函数的第一个参数给出MySQL_init()建立的MYSQL结构的地址。接下来给出数据库链接所需的主机名、用户名以及用户密码。数据库名称由第五个参数给出。端口、Unix系统下的套接字文件路径及名称,以及客户机标识由第6、第七以及第八个参数分别给出。对于任何须要字符指针的参数,若是其值为NULL,即告知服务器使用默认设置。对于无符号整形变量,一般以0做为默认值。多线程
#include<stdio.h> #include<stdlib.h> #include<mysql/mysql.h> int main(void) { MYSQL*mysql; MYSQL_RES*result; MYSQL_ROW row; MYSQL_FIELD*field; const char*host="localhost"; const char*user="root"; const char*password="my_password"; const char*database="workrequests"; unsigned int port=3306; const char*socket=NULL; unsigned long flag=0; int i, num_fields; mysql=mysql_init(NULL); mysql_real_connect(mysql, host, user, password, database,port, socket, flag); const char*sql_stmnt="SELECT*FROM stores"; ulong bytes=strlen(sql_stmnt); mysql_real_query(mysql, sql_stmnt, bytes); result=mysql_store_result(mysql); num_fields=mysql_field_count(mysql); while((row=mysql_fetch_row(result))!=NULL) { for(i=0;i<num_fields;i++) {printf("%s,",row[i]);} printf("\n"); } mysql_free_result(result); mysql_close(mysql); return 0; }
5二、mysql_real_escape_string()socket
unsigned long mysql_real_escape_string(MYSQL*mysql, char*result_string, char*result__string, char*original_string, char*result_string, char*original_string, unsigned long src length)
mysql_real_escape_string()将第三个参数给出的字符串,使用转义符转换成合法的SQL语句字符串,转义结果存放在第二个参数指定的变量中。第四个参数给出从源字符串复制的字节数。当声明二个字符串时,目标字符串的大小必须为源字符串长度的2倍,再加一个字
节。以下面的示例所示:
…… const char client_name[]="O'Reilly Media"; ulong bytes=strlen(client_name); char client_name_esc[(2*bytes)+1]; mysql_real_escape_string(mysql, client_name_esc, client_name, bytes); char*sql_stmnt; sprintf(sql_stmnt,"INSERT INTO clients(client_name) VALUES('%s')",client_name_esc); mysql_real_query(mysql, sql_stmnt, strlen(sql_stmnt)); ……
创建完存放客户机名称的初始变量后,一般用C函数s t r l e n()获取字符串的长度。下一步,声明第二个存放客户机名称的变量,大小是第一个变量的2倍再加一个字节。函数mysql_real_escape_string()运行时需用到二个变量以及第一个变量的长度。示例程序中,函数为客户名称中的撇号前加一个反斜杠,这能够避免之后运行查询时发生错误。使用C函数sprintf(),将转义后的客户名称插入给定的SQL语句中。最后,使用函数mysql_real_query()执行查询语句。
5三、mysql_real_query()
int mysql_real_query(MYSQL*mysql, const char*query,unsigned int length)
经过该函数,能够执行第二个参数指定的SQL查询。在此,至少指定一条SQL语句。与mysql_query()不一样,该函数可执行包含二进制数据的查询。因为具有这个特性,因此须要在第三个参数中给出查询字符串包含的字节数。可使用C函数strlen()肯定字节数。若是函数执行成功则返回零值,不然返回非零值。
mysql=mysql_init(NULL); mysql_real_connect(mysql, host, user, password, database, port, socket, flag); const char*sql_stmnt="SELECT*FROM stores"; ulong bytes=strlen(sql_stmnt); mysql_real_query(mysql, sql_stmnt, bytes); result=mysql_store_result(mysql); num_fields=mysql_field_count(mysql); while((row=mysql_fetch_row(result))!=NULL) { for(i=0;i<num_fields;i++) {printf("%s,",row[i]);} printf("\n"); }
示例程序中,使用C函数strlen()获取了存放SQL语句的变量长度,结果存放在bytes的变量中。而后,将bytes变量做为函数mysql_real_query()的第三个参数。也可使用strnlen(sql_stmnt)代替bytes,做为函数的第三个参数。
5四、mysql_reload()
int mysql_reload(MYSQL*mysql);
函数告知MySQL服务器从新装载受权表。若是装载成功返回,函数返回0,不然返回一个非零值。不推荐使用这个函数。一般使用在mysql_query()或mysql_real_query()中使用语句FLUSH PRIVILEGES代替该函数。
5五、mysql_refresh()
int mysql_refresh(MYSQL*mysql, unsigned int options)
该函数用于刷新缓存和数据表,也可用于重置备份服务器。若是操做成功,函数返回0,不然返回非零值。链接用户必须拥有RELOAD权限才可以使用该函数。函数能够指定如下几个选项:REFRESH_GRANT、REFRESH_LOG、REFRESH_TABLES、REFRESH_HOSTS、REFRESH_MASTER、REFRESH_SLAVE、REFRESH_STATUS以及REFRESH_THREADS。有四种可能返回的错误:CR_COMMANDS_OUT_OF_SYNC、CR_SERVER_GONE_ERROR、CR_SERVER_LOST或CR_UNKNOWN_ERROR。下面是函数的示例程序:
mysql_refresh(MYSQL mysql, unsigned int REFRESH_TABLES);
5五、mysql_roolback()
my_bool mysql_roolback(MYSQL*mysql)
该函数用于回退当前事务。若是当前事务已经调用了函数mysql_commit(),则该函数将再也不起做用。若是函数执行成功则返回0,不然返回非零值。
5六、mysql_row_seek()
MYSQL_ROW_OFFSET mysql_row_seek(MYSQL*result,MYSQL_ROW_OFFSET offset)
该函数可将指针移动到结果集中任意行,第二个参数指定了行偏移量。偏移量必须是MYSQL_ROW_OFFSET结构。可使用函数mysql_row_tell()获取偏移量。
MYSQL_ROW_OFFSET special_location; while((row=mysql_fetch_row(result))!=NULL) { if(strcmp(row[1],"1000")==0) { special_location=mysql_row_tell(result); continue; } if(!mysql_more_results(mysql)) { mysql_row_seek(result, special_location); printf("%s(%s)\n",row[1],row[0]); break; } printf("%s(%s)\n",row[1],row[0]); }
该示例中,须要获取一个客户列表,但开发人员想让客户标识码为1000的记录最后显示。所以,使用一个i f语句查找指定的记录。找到所需记录后,使用函数mysql_row_tell()为结果集中该行作一个标记。while语句余下的打印指定行部分忽略不显示了。使用函数mysql_more_results(),利用另外一个if语句判断结果集的结束位置。若是肯定结果集中已没有结果能够显示,则将指针移到mysql_row_tell()标记的记录,输出该记录的信息,最后使用break结束退出while循环。
5七、mysql_row_tell()
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES*result)
该函数返回结果集中指针的当前位置,经过函数mysql_store_result()得到结果集。当取回结果时,可使用该函数的返回值做为mysql_row_seek()的参数来修改指针位置。
5八、mysql_select_db()
int mysql_select_db(MYSQL* mysql,const char*database);
使用该函数选择当前链接下不一样的数据库。函数的第二个参数给出新数据库的名称。若是操做成功返回0,不然返回非零值。
5九、
mysql_set_character_set()
int mysql_set_character_set(MYSQL*mysql, const char*char_set)
该函数用于为当前链接设置默认字符集。若是设置成功则返回0,不然返回非零值。
60、mysql_set_local_infile_default()
void mysql_set_local_infile_default(MYSQL*mysql);
该函数能够令C客户机库默认支持LOAD LOCAL DATA INFILE语句。C库函数一般能够自动调用该函数。
6一、mysql_set_local_infile_hander()
void mysql_set_local_infile_handler(MYSQL*mysql,int(*local_infle_init)(void**,const char*,void*),
int(*local_infle_read)(void*,char*,unsigned int),
void(*local_infle_end)(void*),
int(*local_infle_error)(void*,char*,unsigned int),
void*userdata)
使用该函数容许执行LOAD DATA LOCAL INFILE语句时使用回调函数。首先须要建立回调函数:
…… int local_infile_init(void**ptr, const char*file_name, void*user_info); int local_infile_read(void*ptr, char*buffer, unsigned int buffer_len); void local_infile_end(void*ptr); int local_infile_error(void*ptr, char*error_msg, unsigned int error_msg_len); ……
6二、mysql_set_server_option()
int mysql_set_server_option(MYSQL*mysql,enum mysql_set_option option)
该函数能够启用或禁用一个服务器选项。目前,能够选择的选项有MYSQL_OPTION_MULTI_STATEMENTS_ON以及MYSQL_OPTION_MULTI_STATEMENTS_OFF,这二个选项能够分别启用和禁用多重SQL语句。若是操做成功返回0,不然返回一个非零值。
6三、mysql_shutdown()
int mysql_shutdowm(MYSQL* mysql)
该函数能够用来关闭MYSQL服务器。
6四、mysql_sqlstate()
const char* mysql_sqlstate(MYSQL* mysql)
该函数用于返回当前连接最后一次发生错误的错误代码,字符串包含5个字符,结束位置是一个NULL字符。00000表示没有错误,HY000表示映射的错误。
6五、mysql_ssl_set()
my_bool mysql_ssl_set(MYSQL*mysql,const char*key_path,const char*cert_path, const char*ca_path,const char*pem_path, const char*cipher)
该函数使用SSL创建一个安全链接。要使用该函数,客户机库必须支持OpenSSL,并且要在mysql_real_connect()以前调用该函数。若是没有发生错误,函数返回0。若是SSL设置不正确,mysql_real_connect()将返回出错信息。key_path是key文件的路径名;cert_path是数字证书文件的路径名;ca_path是数字证书受权文件的路径名;pem_path是包含pem格式的可信任SSL CA证书的路径;cipher包含了用于SSL加密的许可密码列表。未使用的参数可将其设为NULL。
6六、mysql_stat()
char* mysql_stat(MYSQL*mysql);
该函数返回一个包含当前连接下的mysql服务器的状态信息字符串。
6七、mysql_store_result()
MYSQL_RES* mysql_store_result(MYSQL*mysql);
函数读取并存储MySQL_R E S结构的结果集。一旦完成了对结果集的操做,必须使用函数mysql_free_result()释放分配给结果集的内存。若是函数执行失败或者使用的是不能返回任何结果集的查询类型(例如:UPDATE语句),函数将返回NULL。
6八、mysql_thread_end()
void mysql_thread_end(void);
一般在释放mysql_thread_init()分配的内存以前调用该函数。该函数没有返回值,也不能自动调用它。
6九、mysql_thread_id()
unsigned long mysql_thread_id(MYSQL*mysql)
该函数返回当前链接的线程标识码。若是链接关闭或重启,线程标识码会改变。
70、mysql_thread_init()
my_bool mysql_thread_init(void);
该函数用于初始化线程相关的变量。它能够被mysql_connect()、mysql_init()、mysql_library_init()以及mysql_server_init()自动调用。若是函数操做成功返回0,不然返回非零值。
7一、mysql_use_result()
MYSQL_RES* mysql_use_result(MYSQL*mysql)
该函数可读取查询结果,每次读取一行结果。它的运行方式与函数mysql_store_result()很类似,不一样之处在于mysql_store_result()一次就检索并存储全部的数据供之后使用。若是结果集数量庞大且对处理速度要求高时,最好使用mysql_use_result()。使用该函数,每检索一行结果就可进行处理,而没必要等到全部数据都被检索完毕。该函数的一个缺点是,当处理一个查询的结果集时,不能执行其余的查询操做。同时,因为结果集的大小是未知的,因此不能使用mysql_data_seek(),mysql_num_row()的返回值也是变化的。
7二、mysql_warning_count()
unsigned int mysql_warning_count(MYSQL*mysql)该函数返回前面查询中遇到的警告信息数。