return只是返回!要清空结果集就要关闭result

解决方案 »

  1.   

    那return之后,代码都不执行了,怎么办? 提前关闭?
      

  2.   

    return $result;之后,不但结果不会被注销掉,调用db_execute函数的部分,还可以重复使用return之后$result中的内容
      

  3.   


    那在别的函数里用完return返回的$return时,注销掉,那么do_execute里的结果集还有吗? 
      

  4.   

    楼主,肯定会注销掉,你都执行了mysql_close,关闭了数据库链接,之前那个$result是一个资源变量(可以讲是一串Resource的字符,而不是真正的结果集)。
      

  5.   

    楼主试一下,去掉mysql_close那行代码
      

  6.   

    释放资源
    由于 PHP4 Zend 引擎引进了资源计数系统,可以自动检测到一个资源不再被引用了(和 Java 一样)。这种情况下此资源使用的所有外部资源都会被垃圾回收系统释放。由此原因,很少需要用某些 free-result 函数来手工释放内存。 
    注: 持久数据库连接比较特殊,它们不会被垃圾回收系统破坏执行完db_execute然后关闭数据库吧
      

  7.   

    函数是这样写的function showproduct(){
    $result=db_execute("select * from product");
    echo '<table border="1">';
    while($row=mysql_fetch_array($result)){
    echo '<tr><td>'.$row['subject'].'</td>';
            echo '<td>'.$row['author'].'</td></tr>';
             //这里还输出很多
    }
    echo '</table>';
    mysql_free_result($result);//释放结果集
    }function db_execute($query){
    //连接数据库
    $con=mysql_connect("localhost", "laya168", "laya168") or die("Could not connect<br />"); 
    mysql_select_db("laya",$con); 
    //执行查询
    $result=mysql_query($query) or die("select faild");
    mysql_close($con);
    return $result;
    }
    在showproduct()执行后,释放了结果集,那么这个$result在do_execute里还存在吗?
      

  8.   

    do_execute中的$result变量跟do_execute共存,如果do_execute没了,do_execute中的$result也就没有了。
    但是,$result所对应的结果集,在mysql_free_result之前不会消失,会一直停留在内存之上以待其他成员调用。
      

  9.   

    o~   也就是说在showproduct()中的结果集在内存里一直指向do_execute里的结果集.直到mysql_free_result后才会释放吗?
      

  10.   

    PHP5以上版本,
    do_execute里的结果集在以下两种情况会被释放
    1.也就是你用的mysql_free_result之后
    2.整个程序中,没有任何一个变量参照结果集所占用内存的地址的情况下,Zend引擎会自动释放