mysql_fetch_row(result); 会不会导致超时现象?这个函数的负担不会很大吧!

解决方案 »

  1.   

    应该不会吧。这个函数是从已经得到的记录集result中,取出一条记录而已。
      

  2.   


    这里我就有个问题了,远程连接数据库的时候,结果集如果得到了,是已经从服务端发送到了客户端了?还是每次fetch的时候才传送啊
      

  3.   

    MySQL.h 的c API中
    int STDCALL mysql_query(MYSQL *mysql, const char *q);
    int STDCALL mysql_send_query(MYSQL *mysql, const char *q,
     unsigned long length);
    int STDCALL mysql_real_query(MYSQL *mysql, const char *q,
    unsigned long length);
    MYSQL_RES *     STDCALL mysql_store_result(MYSQL *mysql);
    MYSQL_RES *     STDCALL mysql_use_result(MYSQL *mysql);
    提供的mysql_query+mysql_store_result应该是将结果保存到客户端,每次fetch的时候不传送,而使用mysql_real_query时每次fetch的时候传送
    (未得到正式资料,仅个人看法)
      

  4.   

    mysql_fetch_row(result)是从得到的结果集取出一行数据。而得到result有两种方法(MySQL C API所提供的):
    客户端处理结果集的方式有两种。一种方式是,通过调用mysql_store_result(),一次性地检索整个结果集。该函数能从服务器获得查询返回的所有行,并将它们保存在客户端。第二种方式是针对客户端的,通过调用mysql_use_result(),对“按行”结果集检索进行初始化处理。该函数能初始化检索结果,但不能从服务器获得任何实际行。(来源于Mysql5.1中文手册)至于超时情况就取决于楼主的实际应用了,不妨把代码贴上来。
      

  5.   

    mysql_fetch_row(result)是从得到的结果集取出一行数据。而得到result有两种方法(MySQL C API所提供的):
    客户端处理结果集的方式有两种。一种方式是,通过调用mysql_store_result(),一次性地检索整个结果集。该函数能从服务器获得查询返回的所有行,并将它们保存在客户端。第二种方式是针对客户端的,通过调用mysql_use_result(),对“按行”结果集检索进行初始化处理。该函数能初始化检索结果,但不能从服务器获得任何实际行。(来源于Mysql5.1中文手册)至于超时情况就取决于楼主的实际应用了,不妨把代码贴上来。
      

  6.   

    mysql_fetch_row 会不会抛出异常?
      

  7.   

    mysql_fetch_row 会不会抛出异常?
    =========
    应该不会,内存分配在mysql_store_result()时进行,mysql_fetch_row只是将结果中的字段的指针返回(char** 暂称为字段指针),相对数据少的多(与字段数相同),也可能数据库返整个的结果分配大内存时还够,不料在分配小的与字段数相同的字段指针的内存时却在小河里翻了船,最可能mysql的实现者在mysql_store_result()时就将字段指针(mysql_fetch_row返回值空间)一并分配了,省得每次mysql_fetch_row都重新分配一样大小的内存,这样就肯定不会出现内存分配异常了。