MYSQL_RES *res;
MYSQL_ROW row;

res = mysql_store_result(g_conn);
if(res==NULL)
{
    write_log("res is null");
     return SQL_FAILED;
}
row = mysql_fetch_row(res);
mysql_free_result(res);
if (row == NULL)
{
      write_log("functiont mysql_fetch_row return NULL");
      return SQL_FAILED;
}
为何我的日志有时候是提示 :functiont mysql_fetch_row return NULL,也就是说mysql_fetch_row(res);返回的是空,但是res是不为空的,而且我查了数据库,这条记录时存在的,那么可能只有一个:mysql_fetch_row(res)执行出错了!我的推断是对的吗,还是有误区呢?求大侠指点!

解决方案 »

  1.   

    输出mysql_error看看问题如果为空,先看res的sql语句是否有结果然后改为下面的试试:
    row = mysql_fetch_row(result);
    if (row)
    {
       ......
    }
      

  2.   

    error的内容为空,res是有内容的,不然log中是有记录的!
    我的解决方案是:
    retry=3
    int sleep[]={0,1,2,4,8},sleep_id=0;
    do{
       sleep[id++];
       res = mysql_store_result(g_conn);
       if(res==NULL)
      {
        write_log("res is null");
        return SQL_FAILED;
       }
      row = mysql_fetch_row(res);
      mysql_free_result(res);
      if (row == NULL)
      {
        write_log("functiont mysql_fetch_row return NULL");
        continue;
      }
      ...
      break;
    }while(--retry);
    if(retry) return SQL_SUCCEED;
    else return SQL_FAILED;
    ...
    暴力解决了,但是row会出现null确实让人不解!
      

  3.   

    为何我的日志有时候是提示 :functiont mysql_fetch_row return NULL
    啥叫有时候提示?
    你写的 mysql_fetch_row() 只能取出一条记录。mysql_fetch_row() 函数从结果集中取得一行作为数字数组。
    依次调用 mysql_fetch_row() 将返回结果集中的下一行,如果没有更多行则返回 FALSE
    循环使用才能一条一条的取到数据。
      

  4.   

    我就是一次性将res放到row数组中 然后通过row[0]~row[n]对对应的变量进行赋值
      

  5.   

    res = mysql_store_result(g_conn);
    你能不能讲一下  mysql_store_result 他是干吗用的?我没有用过哎
      

  6.   

    MYSQL_ROW mysql_fetch_row(MYSQL_RES *result) 描述检索结果集的下一行。在mysql_store_result()之后使用时,如果没有要检索的行,mysql_fetch_row()返回NULL。在mysql_use_result()之后使用时,如果没有要检索的行或出现了错误,mysql_fetch_row()返回NULL。行内值的数目由mysql_num_fields(result)给出。如果行中保存了调用mysql_fetch_row()返回的值,将按照row[0]到row[mysql_num_fields(result)-1],访问这些值的指针。行中的NULL值由NULL指针指明。
      

  7.   

    MYSQL_RES *mysql_store_result(MYSQL *mysql) 
    如果查询未返回结果集,mysql_store_result()将返回Null指针(例如,如果查询是INSERT语句)。如果读取结果集失败,mysql_store_result()还会返回Null指针。通过检查mysql_error()是否返回非空字符串,mysql_errno()是否返回非0值,或mysql_field_count()是否返回0,可以检查是否出现了错误。如果未返回行,将返回空的结果集。(空结果集设置不同于作为返回值的空指针)。
      

  8.   

    通过以上分析,如果mysql_store_result()调用没过结果或者调用失败将返回NULL;我的查询是select,如果所以mysql_store_result()在调用后如果成功必然返回非0的res指针。
    对res指向的内容进行拷贝到row用到mysql_fetch_row,但是row是空的,能说明是mysql_store_result的调用其实没有成功吗?
    请高手指教,api到底是怎么实现的呢?