mysql_store_result()
是 MySQL C API 中的一個函數,用于檢索一個完整的結果集到一個客戶端。當執行一個查詢(通常是 SELECT
查詢)并希望處理所有返回的數據時,可以使用此函數。
概念
mysql_store_result()
函數的原型如下:
MYSQL_RES *mysql_store_result(MYSQL *mysql)
mysql
:這是一個指向MYSQL
結構的指針,該結構代表到一個 MySQL 服務器的連接。
如果查詢成功并返回數據,mysql_store_result()
將返回一個MYSQL_RES
結構的指針,該結構包含結果集。如果查詢沒有返回結果集(例如,執行的是INSERT
、UPDATE
或DELETE
語句),則返回NULL
。如果發生錯誤,mysql_store_result()
也會返回NULL
,此時可以通過mysql_error()
函數獲取錯誤信息。
使用案例
以下是一個使用 mysql_store_result()
的例子:
#include <mysql/mysql.h>
#include <stdio.h>
int main() {MYSQL *conn;MYSQL_RES *result;MYSQL_ROW row;unsigned int num_fields;unsigned int i;// 初始化連接conn = mysql_init(NULL);// 連接到數據庫if (mysql_real_connect(conn, "host", "user", "password", "database", 0, NULL, 0) == NULL) {fprintf(stderr, "%s\n", mysql_error(conn));mysql_close(conn);exit(1);}// 執行查詢if (mysql_query(conn, "SELECT id, name FROM users")) {fprintf(stderr, "%s\n", mysql_error(conn));mysql_close(conn);exit(1);}// 存儲結果集result = mysql_store_result(conn);if (result == NULL) {fprintf(stderr, "%s\n", mysql_error(conn));mysql_close(conn);exit(1);}// 獲取列數num_fields = mysql_num_fields(result);// 遍歷結果集while ((row = mysql_fetch_row(result))) {for (i = 0; i < num_fields; i++) {printf("%s ", row[i] ? row[i] : "NULL");}printf("\n");}// 釋放結果集mysql_free_result(result);// 關閉連接mysql_close(conn);return 0;
}
在這個例子中,我們首先連接到 MySQL 數據庫,然后執行一個 SELECT
查詢。使用 mysql_store_result()
函數將查詢結果存儲在 result
變量中。然后,我們使用 mysql_num_fields()
函數獲取結果集中的列數,并使用 mysql_fetch_row()
函數遍歷每一行數據。每行數據都通過 row
變量訪問,并打印出來。處理完所有數據后,我們使用 mysql_free_result()
釋放結果集,最后關閉數據庫連接。
請注意,mysql_store_result()
會將整個結果集加載到客戶端內存中,對于非常大的結果集,這可能會導致內存不足的問題。在這種情況下,可以考慮使用 mysql_use_result()
,它會逐行檢索結果,但需要更謹慎地處理,因為它會保持與服務器的連接打開狀態,直到結果集被完全讀取。