C語(yǔ)言是一種非常強(qiáng)大的編程語(yǔ)言,可以被用于許多領(lǐng)域的開(kāi)發(fā)。同時(shí),MySQL也是一個(gè)功能強(qiáng)大、被廣泛使用的數(shù)據(jù)庫(kù)。在C語(yǔ)言中,我們可以使用MySQL的C API庫(kù),實(shí)現(xiàn)對(duì)MySQL數(shù)據(jù)庫(kù)的訪問(wèn)和操作。
與MySQL進(jìn)行交互的第一步是連接到數(shù)據(jù)庫(kù)。我們可以使用mysql_init()函數(shù)初始化一個(gè)空的MySQL對(duì)象,以及使用mysql_real_connect()函數(shù)連接到MySQL服務(wù)器。此外,我們還需要使用mysql_select_db()函數(shù)選擇要使用的數(shù)據(jù)庫(kù)。
MYSQL *conn; /* MySQL連接 */ MYSQL_RES *res; /* MySQL查詢結(jié)果集 */ MYSQL_ROW row; /* MySQL查詢結(jié)果行 */ char *server = "localhost"; /* MySQL服務(wù)器地址 */ char *user = "root"; /* 用戶名 */ char *password = "password"; /* 密碼 */ char *database = "example"; /* 要使用的數(shù)據(jù)庫(kù)名 */ conn = mysql_init(NULL); /* 連接數(shù)據(jù)庫(kù) */ if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } /* 選擇數(shù)據(jù)庫(kù) */ if (mysql_select_db(conn, database) != 0) { fprintf(stderr, "%s\n", mysql_error(conn)); mysql_close(conn); exit(1); }
接下來(lái),我們可以使用mysql_query()函數(shù)執(zhí)行SQL查詢。該函數(shù)返回0表示查詢成功,-1表示查詢失敗。同時(shí),我們還需要使用mysql_store_result()函數(shù)存儲(chǔ)查詢結(jié)果集,并使用mysql_fetch_row()函數(shù)獲取結(jié)果集中的每一行數(shù)據(jù)。
/* 查詢數(shù)據(jù) */ if (mysql_query(conn, "select * from users order by id asc")) { fprintf(stderr, "%s\n", mysql_error(conn)); mysql_close(conn); exit(1); } /* 記錄查詢結(jié)果集 */ res = mysql_store_result(conn); /* 處理查詢結(jié)果集 */ while ((row = mysql_fetch_row(res))) { printf("%s %s %s %s\n", row[0], row[1], row[2], row[3]); } /* 釋放查詢結(jié)果集 */ mysql_free_result(res); /* 關(guān)閉連接 */ mysql_close(conn);
在對(duì)MySQL數(shù)據(jù)庫(kù)進(jìn)行查詢時(shí),我們需要注意防止SQL注入攻擊。可以使用mysql_real_escape_string()函數(shù)轉(zhuǎn)義輸入的字符串,防止惡意字符對(duì)數(shù)據(jù)庫(kù)的破壞。
綜上所述,通過(guò)C語(yǔ)言連接MySQL數(shù)據(jù)庫(kù)進(jìn)行查詢是很方便的。我們只需要初始化MySQL對(duì)象、連接到服務(wù)器、選擇要使用的數(shù)據(jù)庫(kù)、執(zhí)行SQL查詢、處理查詢結(jié)果集即可。同時(shí),我們需要注意安全性問(wèn)題,避免SQL注入攻擊。