1. 程式人生 > >C語言呼叫MySQL介面

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);
  • 引數說明:

    1. 初始化過的MySQL客戶端控制代碼
    2. MySQL伺服器地址(也可以寫localhost)
    3. 登陸MySQL伺服器的使用者名稱
    4. 登陸MySQL伺服器的密碼
    5. 資料庫名
    6. MySQL伺服器的埠號(預設3306)
    7. 直接填預設值NULL
    8. 一般不關注,填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伺服器檔案描述符洩漏