爲什麼在mysql_query()返回成功後,mysql_store_result()有時返回NULL?


有可能在一個對mysql_query()成功的調用後,mysql_store_result()返回NULL。當這發生時,它意味着出現了下列條件之一:

  • 有一個malloc()失敗(例如,如果結果集合太大)。
  • 數據不能被讀取(發生在連接上的一個錯誤)。
  • 查詢沒有返回數據(例如,它是一個INSERT、UPDATE或DELETE)。

你總是可以通過調用mysql_field_count()檢查語句是否應該產生非空的結果。如果mysql_field_count()返回零,結果是空的並且最後一個查詢是不回值的一條語句(例如,一條INSERT或DELETE)。如果mysql_field_count()返回非零值,語句應該產生非空的結果。見對mysql_field_count()描述的一個例子。


你可以調用mysql_error()或mysql_errno()測試一個錯誤。


範例:

MYSQL_RES *result;
unsigned int num_fields;
unsigned int num_rows;

if (mysql_query(&mysql,query_string))
{
    // error
}
else // query succeeded, process any data returned by it
{
    result = mysql_store_result(&mysql);
    if (result)  // there are rows
    {
        num_fields = mysql_num_fields(result);
        // retrieve rows, then call mysql_free_result(result)
    }
    else  // mysql_store_result() returned nothing; should it have?
    {
        if(mysql_field_count(&mysql) == 0)
        {
            // query does not return data
            // (it was not a SELECT)
            num_rows = mysql_affected_rows(&mysql);
        }
        else // mysql_store_result() should have returned data
        {
            fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
        }
    }
}

另一個選擇是用mysql_errno(&mysql)代替mysql_field_count(&mysql)調用。在這種情況中,你直接檢查來自mysql_store_result()的一個錯誤而非從mysql_field_count()值來推斷語句是否是一個SELECT。
發佈了72 篇原創文章 · 獲贊 269 · 訪問量 76萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章