成功調用mysql_query()後,mysql_store_result()能夠返回NULL。出現該情況時,表明出現了下述條件之一:
· 出現了malloc()故障(例如,如果結果集過大)。
· 無法讀取數據(在連接上出現了錯誤)。
· 查詢未返回數據(例如,它是INSERT、UPDATE或DELETE)。
通過調用mysql_field_count(),始終能檢查語句是否應生成非空結果。如果mysql_field_count()返回0,結果為空,而且上一個查詢是未返回值的語句(例如INSERT或DELETE)。如果mysql_field_count()返回非0值,語句應生成非空結果。關於這方面的示例,請參見mysql_field_count()函數介紹:
返回作用在連接上的最近查詢的列數。該函數的正常使用是在mysql_store_result()返回NULL(因而沒有結果集指針)時。在這種情況下,可調用mysql_field_count()來判定mysql_store_result()是否應生成非空結果。這樣,客戶端就能采取恰當的動作,而無需知道查詢是否是SELECT(或類似SELECT的)語句。在這裡給出的示例中,演示了完成它的方法。返回表示結果集中列數的無符號整數。
另一種可選的方法是,用mysql_errno(&mysql)替換mysql_field_count(&mysql)調用。在該情況下,無論語句是否是SELECT,你將直接從mysql_store_result()查找錯誤,而不是從mysql_field_count()的值進行推斷。通過調用mysql_error()或mysql_errno(),可測試是否出現了錯誤。
注意:
對於成功調用mysql_query()進行select語句的查詢,即使查詢的數據不存在(即rowcount=0),result也不為NULL。result為NULL的情況只是檢測上一個查詢是否是有返回值的語句。
范例:
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)); } } }轉載請注明地址:http://www.cnblogs.com/fnlingnzb-learner/p/5826533.html