首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

mysql_store_result 返回 NULL 根因分析與正確處理模式

     編輯:MySQL 綜合教學

C API 中 mysql_store_result 返回 NULL 的三大原因

調用 mysql_query() 成功後,mysql_store_result() 返回 NULL 並不一定意味著錯誤,必須結合 mysql_field_count() 判斷。

三種導致 NULL 的情況

  1. 內存分配失敗:結果集過大導致 malloc() 失敗
  2. 網絡讀取錯誤:連接斷開或數據包損壞
  3. 非查詢語句:INSERT/UPDATE/DELETE 等不返回結果集的語句

標準判斷邏輯

MYSQL_RES *result = mysql_store_result(&mysql);
if (result) {
    // 有結果集:SELECT/SHOW/DESC 等
    unsigned int num_fields = mysql_num_fields(result);
    // 遍歷行數據...
    mysql_free_result(result);
} else {
    // NULL 分支:必須檢查 field_count
    if (mysql_field_count(&mysql) == 0) {
        // 確認為非查詢語句
        unsigned long long affected = mysql_affected_rows(&mysql);
        printf("Affected rows: %llu\n", affected);
    } else {
        // 真正的錯誤:內存不足或網絡異常
        fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
    }
}

關鍵 API 對照

函數用途關鍵點
mysql_field_count()結果集列數0 = 無結果集語句;>0 = 應有結果集但獲取失敗
mysql_affected_rows()影響行數僅對 INSERT/UPDATE/DELETE 有效
mysql_errno()/mysql_error()錯誤碼/信息區分真錯誤與正常無結果集
mysql_num_fields()結果集列數需在 result 非 NULL 時調用

常見誤區澄清

誤區:SELECT 查無數據時 result 為 NULL。
事實:rowcount=0 時 result 依然有效(指向空結果集),只有非查詢語句或真錯誤才返回 NULL。

替代方案:mysql_use_result

  • mysql_store_result:一次性讀取全部結果到客戶端緩存,佔用客戶端內存,釋放服務器資源快,支持隨機訪問(mysql_data_seek)
  • mysql_use_result:流式讀取,逐行從服務器拉取,客戶端內存佔用小,但佔用服務器資源久,讀取期間不能執行其他查詢

正確處理 NULL 返回值,是編寫健壯 MySQL C API 應用的基礎技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved