這里歸納了C API可使用的函數
函數 |
描述 |
mysql_affected_rows() |
返回上次UPDATE、DELETE或INSERT查詢更改/刪除/插入的行數。 |
mysql_autocommit() |
切換 autocommit模式,ON/OFF |
mysql_change_user() |
更改打開連接上的用戶和數據庫。 |
mysql_charset_name() |
返回用於連接的默認字符集的名稱。 |
mysql_close() |
關閉服務器連接。 |
mysql_commit() |
提交事務。 |
mysql_connect() |
連接到MySQL服務器。該函數已不再被重視,使用mysql_real_connect()取代。 |
mysql_create_db() |
創建數據庫。該函數已不再被重視,使用SQL語句CREATE DATABASE取而代之。 |
mysql_data_seek() |
在查詢結果集中查找屬性行編號。 |
mysql_debug() |
用給定的字符串執行DBUG_PUSH。 |
mysql_drop_db() |
撤銷數據庫。該函數已不再被重視,使用SQL語句DROP DATABASE取而代之。 |
mysql_dump_debug_info() |
讓服務器將調試信息寫入日志。 |
mysql_eof() |
確定是否讀取了結果集的最后一行。該函數已不再被重視,可以使用mysql_errno()或mysql_error()取而代之。 |
mysql_errno() |
返回上次調用的MySQL函數的錯誤編號。 |
mysql_error() |
返回上次調用的MySQL函數的錯誤消息。 |
mysql_escape_string() |
為了用在SQL語句中,對特殊字符進行轉義處理。 |
mysql_fetch_field() |
返回下一個表字段的類型。 |
mysql_fetch_field_direct() |
給定字段編號,返回表字段的類型。 |
mysql_fetch_fields() |
返回所有字段結構的數組。 |
mysql_fetch_lengths() |
返回當前行中所有列的長度。 |
mysql_fetch_row() |
從結果集中獲取下一行 |
mysql_field_seek() |
將列光標置於指定的列。 |
mysql_field_count() |
返回上次執行語句的結果列的數目。 |
mysql_field_tell() |
返回上次mysql_fetch_field()所使用字段光標的位置。 |
mysql_free_result() |
釋放結果集使用的內存。 |
mysql_get_client_info() |
以字符串形式返回客戶端版本信息。 |
mysql_get_client_version() |
以整數形式返回客戶端版本信息。 |
mysql_get_host_info() |
返回描述連接的字符串。 |
mysql_get_server_version() |
以整數形式返回服務器的版本號。 |
mysql_get_proto_info() |
返回連接所使用的協議版本。 |
mysql_get_server_info() |
返回服務器的版本號。 |
mysql_info() |
返回關於最近所執行查詢的信息。 |
mysql_init() |
獲取或初始化MYSQL結構。 |
mysql_insert_id() |
返回上一個查詢為AUTO_INCREMENT列生成的ID。 |
mysql_kill() |
殺死給定的線程。 |
mysql_library_end() |
最終確定MySQL C API庫。 |
mysql_library_init() |
初始化MySQL C API庫。 |
mysql_list_dbs() |
返回與簡單正則表達式匹配的數據庫名稱。 |
mysql_list_fields() |
返回與簡單正則表達式匹配的字段名稱。 |
mysql_list_processes() |
返回當前服務器線程的列表。 |
mysql_list_tables() |
返回與簡單正則表達式匹配的表名。 |
mysql_more_results() |
檢查是否還存在其他結果。 |
mysql_next_result() |
在多語句執行過程中返回/初始化下一個結果。 |
mysql_num_fields() |
返回結果集中的列數。 |
mysql_num_rows() |
返回結果集中的行數。 |
mysql_options() |
為mysql_connect()設置連接選項。 |
mysql_ping() |
檢查與服務器的連接是否工作,如有必要重新連接。 |
mysql_query() |
執行指定為“以Null終結的字符串”的SQL查詢。 |
mysql_real_connect() |
連接到MySQL服務器。 |
mysql_real_escape_string() |
考慮到連接的當前字符集,為了在SQL語句中使用,對字符串中的特殊字符進行轉義處理。 |
mysql_real_query() |
執行指定為計數字符串的SQL查詢。 |
mysql_refresh() |
刷新或復位表和高速緩沖。 |
mysql_reload() |
通知服務器再次加載授權表。 |
mysql_rollback() |
回滾事務。 |
mysql_row_seek() |
使用從mysql_row_tell()返回的值,查找結果集中的行偏移。 |
mysql_row_tell() |
返回行光標位置。 |
mysql_select_db() |
選擇數據庫。 |
mysql_server_end() |
最終確定嵌入式服務器庫。 |
mysql_server_init() |
初始化嵌入式服務器庫。 |
mysql_set_server_option() |
為連接設置選項(如多語句)。 |
mysql_sqlstate() |
返回關於上一個錯誤的SQLSTATE錯誤代碼。 |
mysql_shutdown() |
關閉數據庫服務器。 |
mysql_stat() |
以字符串形式返回服務器狀態。 |
mysql_store_result() |
檢索完整的結果集至客戶端。 |
mysql_thread_id() |
返回當前線程ID。 |
mysql_thread_safe() |
如果客戶端已編譯為線程安全的,返回1。 |
mysql_use_result() |
初始化逐行的結果集檢索。 |
mysql_warning_count() |
返回上一個SQL語句的告警數。 |
做了下簡單的封裝
頭文件
1 #ifndef __MYMYSQL_H__ 2 #define __MYMYSQL_H__ 3 #include <WinSock2.h> 4 #include <mysql.h> 5 #pragma comment(lib,"libmysql.lib") 6 #define SZCHARSIZE 100 7 typedef struct _tagMysqlInfo 8 { 9 char host[SZCHARSIZE]; //主機 10 char user[SZCHARSIZE]; //用戶名 11 char passwd[SZCHARSIZE]; //密碼 12 char db[SZCHARSIZE]; //數據庫 13 UINT port; //端口號 14 char unix_socket[SZCHARSIZE]; //如果unix_socket不是NULL,該字符串描述了應使用的套接字或命名管道。注意,“host”參數決定了連接的類型。 15 DWORD client_flag; // client_flag的值通常為0 16 }MYSQLINFO,*PMYSQLINFO; 17 class CMyMysql 18 { 19 public: 20 CMyMysql(void); 21 BOOL connect(const MYSQLINFO); //連接成功返回true 失敗返回false 22 BOOL query(const char*); //查詢mysql語句 23 my_ulonglong GetresultLine(); //獲取查詢到的行數 24 MYSQL* GetMysqlPtr(); //獲取mysql指針 25 MYSQL_RES* GetMysqlresPtr(); //獲取mysqlres指針 26 ~CMyMysql(void); 27 private: 28 MYSQL* m_mYsqlPtr; //mysql 指針 29 MYSQL_RES* m_mYsqlres; //mysql 結果集指針 30 }; 31 #endif //__MYMYSQL_H__
cpp文件
1 #include "MyMysql.h" 2 3 CMyMysql::CMyMysql(void) 4 :m_mYsqlPtr(NULL) 5 { 6 m_mYsqlPtr = mysql_init(NULL); 7 } 8 9 10 CMyMysql::~CMyMysql(void) 11 { 12 if (m_mYsqlPtr) 13 mysql_close(m_mYsqlPtr); 14 if (m_mYsqlres) 15 mysql_free_result(m_mYsqlres); 16 } 17 BOOL CMyMysql::connect(const MYSQLINFO mysqlInfo) 18 { 19 if(!mysql_real_connect(m_mYsqlPtr,mysqlInfo.host,mysqlInfo.user,mysqlInfo.passwd,mysqlInfo.db,mysqlInfo.port,mysqlInfo.unix_socket,mysqlInfo.client_flag)) 20 return FALSE; 21 else 22 return TRUE; 23 } 24 BOOL CMyMysql::query(const char* szSql) 25 { 26 if(!strlen(szSql))return FALSE; 27 if(mysql_query(m_mYsqlPtr,szSql)) 28 return FALSE; 29 else 30 return TRUE; 31 } 32 my_ulonglong CMyMysql::GetresultLine() 33 { 34 m_mYsqlres = mysql_store_result(m_mYsqlPtr); 35 if(!m_mYsqlres)return NULL; 36 return mysql_num_rows(m_mYsqlres); 37 } 38 MYSQL* CMyMysql::GetMysqlPtr() 39 { 40 return m_mYsqlPtr; 41 } 42 MYSQL_RES* CMyMysql::GetMysqlresPtr() 43 { 44 return m_mYsqlres; 45 }
簡單的調用例子用的MFC
1 void CMysqlDemoDlg::OnBnClickedButton1() 2 { 3 CMyMysql * mYSQL = new CMyMysql(); 4 MYSQLINFO mysqlInfo; 5 ZeroMemory(&mysqlInfo,sizeof(MYSQLINFO)); 6 CopyMemory(mysqlInfo.host,"localhost",_tcslen("localhost")); 7 CopyMemory(mysqlInfo.user,"root",_tcslen("root")); 8 CopyMemory(mysqlInfo.passwd,"123456",_tcslen("123456")); 9 mysqlInfo.port =3306; 10 if (!mYSQL->connect(mysqlInfo)) 11 { 12 AfxMessageBox("連接數據庫失敗!\r\n"); 13 delete mYSQL; 14 return ; 15 } 16 if (mysql_set_character_set(mYSQL->GetMysqlPtr(),"gbk")) 17 { 18 AfxMessageBox("設置默認字符失敗!\r\n"); 19 delete mYSQL; 20 21 } 22 if (mysql_select_db(mYSQL->GetMysqlPtr(),"ecshop")) 23 { 24 AfxMessageBox("選擇數據庫失敗!\r\n"); 25 delete mYSQL; 26 } 27 if(!mYSQL->query("select * from ecs_admin_user;")) 28 { 29 AfxMessageBox("查詢失敗!\r\n"); 30 delete mYSQL; 31 } 32 my_ulonglong Line = mYSQL->GetresultLine(); 33 MYSQL_FIELD* fd = NULL; 34 CString str; 35 while (fd = mysql_fetch_field(mYSQL->GetMysqlresPtr())) 36 { 37 str+= fd->name; 38 str+="\r\n"; 39 } 40 SetDlgItemText(IDC_EDIT1,str); 41 MYSQL_ROW rows; 42 str = ""; 43 UINT listSize = mysql_num_fields(mYSQL->GetMysqlresPtr()); 44 while(rows = mysql_fetch_row(mYSQL->GetMysqlresPtr())) 45 { 46 for (UINT i = 0;i<listSize;i++) 47 { 48 str+= rows[i]; 49 } 50 str+="\r\n"; 51 } 52 SetDlgItemText(IDC_EDIT2,str); 53 delete mYSQL; 54 }