有可能在一個對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。