頭文件:#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)該函數返回前面查詢中遇到的警告信息數。