C語言呼叫MySQL介面
說明:在做一個專案的過程中,用到了這部分知識,個人覺得網上關於這部分的介紹真的比較模糊,就自己總結一下專案中用到的這些介面的使用方法。
準備工作
這個專案是在Linux下開發,如果需要使用MySQL關於C語言的介面,首先得包含這個標頭檔案<mysql.h>
,而這個標頭檔案在Linux系統中預設是沒有的,所以首先得先安裝:
//安裝MySQL
sudo yum -y install mysql-sever mysql-client
//安裝MySQL開發包
sudo yum -y install libmysqlclient-dev
介面使用
首先需要引入標頭檔案
<mysql/mysql.h>
1.定義一個控制代碼並初始化
函式原型:
MYSQL* mysql_init(MYSQL* connection);
使用示例:
MYSQL sql;
mysql_init(&sql);
2.連線MySQL資料庫
- 函式原型:
MYSQL* mysql_real_connect( MYSQL* connection,
const char* server_host,
const char* sql_usr_name,
const char* sql_passwd,
const char* db_name,
unsigned int port_num,
const char* unix_socket_name,
unsigned int flags);
引數說明:
- 初始化過的MySQL客戶端控制代碼
- MySQL伺服器地址(也可以寫localhost)
- 登陸MySQL伺服器的使用者名稱
- 登陸MySQL伺服器的密碼
- 資料庫名
- MySQL伺服器的埠號(預設3306)
- 直接填預設值NULL
- 一般不關注,填0即可
返回值: 失敗返回NULL
使用示例:
if(!mysql_real_connect(&sql, "localhost", "root", "xxx", "TestDB",
3306, NULL, 0){
fprintf(stderr,\
"MySQL connect failed!\nReason:%s\n", \
mysql_error(&sql));
return 1;
}
3.錯誤處理
- 函式原型:
char* mysql_error(MYSQL* connection);
此函式返回錯誤資訊unsigned int mysql_errno(MYSQL* connection);
此函式返回錯誤碼
4.設定MySQL的預設字符集
一般直接向瀏覽器響應資料時,使用此函式可以避免中文亂碼
- 函式原型:
int mysql_set_character_set(MYSQL* connection, char* csname);
- 引數說明:
1.已經初始化過的MySQL控制代碼
2.需要設定的字符集(中文為
utf8
) 返回值: 成功返回0,失敗返回非零值
使用示例:
if(mysql_set_character_set(&connection, "utf8")){
fprintf(errno, "%s\n", mysql_error(&sql));
return;
}
5. 向MySQL傳送SQL語句
函式原型:
int mysql_query(MYSQL* connection, const char* query);
第二個引數即拼裝好的SQL語句,執行成功返回0,失敗返回非零值。使用示例:
char query[1024] = "select * from TestDB where id = 1;
if(mysql_query(&connection, query)){
fprintf(errno, "%s\n", mysql_error(&connection));
return;
}
6. 接收MySQL返回的結果
相關函式:
函式原型:
MYSQL_RES *mysql_store_result(MYSQL* connection);
這個函式將立刻儲存在客戶端中返回的所有資料。它返回一個指向結果集結構的指標,如果失敗返回NULL函式原型:
unsigned int mysql_num_fiedls(MYSQL_RES* result);
獲取返回結果集合中每一行的數量(列數)函式原型:
unsigned int mysql_num_rows(MYSQL_RES* result);
獲取返回結果集合中資料的行數函式原型:
MYSQL_ROW mysql_fetch_row(MYSQL_RES* result);
檢索一個結果集合的下一行。當在mysql_store_result()之後使用時,如果沒有更多的行可檢索時,mysql_fetch_row()返回NULL
使用示例:
MYSQL_RES* result = mysql_store_result(&connection);
if(NULL == result){
printf("此次查詢失敗,結果不存在!\n");
}else{
MYSQL_ROW cols = mysql_fetch_row(result);
for(unsigned int i = 0; i < mysql_num_fields(result); ++i){
printf("%s\n",cols[i]);
}
}
7.關閉和MySQL的連線
- 函式原型:
void mysql_close(MYSQL* connection);
如果忘記關閉連線,會造成MySQL伺服器檔案描述符洩漏