说明如下:
1、我的存储过程如下(创建一个临时表,然后调用另外一个存储过程,把相关数据写到此临时表,然后通过select语音返回临时表中的数据集):
BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS tmpLst
(sno int primary key auto_increment,code_value VARCHAR(20),depth int,leaf int);
DELETE FROM tmpLst;CALL sp_createChildLst(rootId,0);select address.id,address.name,address.code_value,address.pid,tmpLst.depth,tmpLst.leaf from tmpLst,address where tmpLst.code_value=address.code_value order by tmpLst.sno;
END
2、调用过程主要如下:
    $rootId = '0';
    $sql= "call sp_showChildLst( $rootId )";
    //获得结果  
    $result=mysql_query($sql, $webconn) or die(mysql_error());
    $note;$i=0; //初始化变量  
    while($infor=mysql_fetch_array($result,MYSQL_ASSOC))
    {.......}
    mysql_free_result($result)
  
3、自己查阅有关网络,大致明白,报错的原因可能是因为我调用存储过程,返回了两个结果集,由于上述代码只关闭了一个,导致第二次调用出错,网络上给出的调用方式大致如下:
 if($db->multi_query("call sp_showChildLst( $rootId )")){    
    do{    
        if($result = $db->store_result()){    
            while ($row = $result->fetch_assoc()){    
                array_push($rows, $row);    
            }    
            $result->close();    
        }    
    }while($db->next_result());    
}  
通过循环,获得每个结果集,都关闭掉。4、尚存困难:另外一个结果集是什么结果集?格式或字段有哪些?两个结果集中,我怎么知道哪个结果集是我真正想要的(通过select 从临时表中查询出的结果)????

解决方案 »

  1.   

    你这的很厉害!
    1、php_mysql 扩展只支持返回一个结果集。如果你有两个结果集,那么第二个是读不到的
    不过 php_mysql 被设计成这样:如果第一个结果集为空,则返回第二个结果集。
    但尽管如此,后续的查询还是会出现问题。需要重新连接数据库
    这也就是 php_mysql 被废止的原因之一2、你的第三段说明,是基于 php_mysqli 扩展的。如果你那样做了,是不会出现问题的3、你都不知道查询将返回什么样的结果,那你的查询目的何在?
      

  2.   

    我为什么说我不知道第二个结果集是什么?因为我在存储过程中做了多次insert及多次update,然后调用了一次select语句,通过存储过程把select出的结果集返回到客户端。我的存储过程逻辑中不存在2个结果集。之所以我认为存在多个结果集的情况,是因为我看到有人说了,调用存储过程会多返回一个结果集,此结果集表明此次调用本身的结果,比如成功还是失败。但这个结果集在我存储过程中select语句返回的结果集之前,还是之后,字段名称是什么等等,我是不知道的。