//调用第一个存储过程
$rs1= $DB->hxProc_GetCount("call Puser_count(@tc)");
echo "---".$rs1 ."---";//调用第二个存储过程
$rs= $DB->hxProc_GetAll("call Puser_list()");
if($rs)
{
foreach($rs AS $key=>$value)
{
echo "<br>" . $value["user_name"] . "-----" . $value["user_pwd"] . "<br>";
}
//echo $rs["user_name"] . "-----" . $rs["user_pwd"];
}
unset($rs);//出错信息:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\wwwroot\php\huaxusoft\class\mysql.db.class.php on line 271//存储过程一(统计总记录数,并返回总数值):
BEGIN
SELECT COUNT(*) INTO ucount FROM glcity_user;
select ucount;
END//存储过程一(查询表中所有记录,并返回记录集):
BEGIN 
    SELECT * FROM glcity_user; 
END//用到的函数:
function hxQuery($sql,$type="ASSOC")
{
$this->rsType = $type != "ASSOC" ? ($type == "NUM" ? MYSQL_NUM : MYSQL_BOTH) : MYSQL_ASSOC;
$this->result = mysql_query($sql,$this->conn);
$this->queryCount++;
if($this->result)
{
return $this->result;
}
else
{
return false;
}
}//取得满足条件的记录总数值==
function hxProc_GetCount($sql = "")
{
if($sql)
{
$this->hxQuery($sql);
unset($sql);
}
$rsC = mysql_fetch_row($this->result);  #返回结果集中行的数目
return $rsC[0];
}

//取得满足条件的记录列表
function hxProc_GetAll($sql="",$nocache=false)
{
if($sql)
{
if($nocache)
{
$this->hxBigQuery($sql);
}
else
{
$this->hxQuery($sql);
}
}
$rs = array();
while($rows = mysql_fetch_array($this->result,$this->rsType))  #从结果集中取得一行作为关联数组,或数字数组,或二者兼有
{
$rs[] = $rows;
}
return $rs;
#在PHP中调用[$rs= $DB->hxGetAll("sql语句");]并输出[if($rs){foreach($rs AS $key=>$value){$value["字段名"];}}]才行
}

解决方案 »

  1.   

    其实 "Warning" 不是 "出错信息" ...您老在 mysql_fetch_array() 之前 dump 一下参数不就清楚啦 ...
      

  2.   


    Mysql调用存储过程时,遍历时同一时刻只能有一个结果集可以访问,必须释放前一个结果集,应该在调用完第一个存储过程后执行mysql_free_resultmysql_free_result
    (PHP 4, PHP 5)mysql_free_result — 释放结果内存说明
    bool mysql_free_result ( resource $result )
    mysql_free_result() 将释放所有与结果标识符 result 所关联的内存。 mysql_free_result() 仅需要在考虑到返回很大的结果集时会占用多少内存时调用。在脚本结束后所有关联的内存都会被自动释放。 成功时返回 TRUE, 或者在失败时返回 FALSE. 为向下兼容仍然可以使用 mysql_freeresult(),但反对这样做。 
      

  3.   

    请问是如下方式用“mysql_free_result()”吗?//调用第一个存储过程
    $rs1= $DB->hxProc_GetCount("call Puser_count(@tc)");
    echo "---".$rs1 ."---";
    mysql_free_result($rs1);//调用第二个存储过程
    $rs= $DB->hxProc_GetAll("call Puser_list()");
    if($rs)
    {
    foreach($rs AS $key=>$value)
    {
    echo "<br>" . $value["user_name"] . "-----" . $value["user_pwd"] . "<br>"; 
    }
    //echo $rs["user_name"] . "-----" . $rs["user_pwd"];
    }
    mysql_free_result($rs);
    unset($rs);我这样用出错:
    Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in D:\wwwroot\php\huaxusoft\admin\article_cp_list.php on line 32
      

  4.   

    //调用第二个存储过程
    $rs= $DB->hxProc_GetAll("call Puser_list()");
    if($rs)
    {
    foreach($rs AS $key=>$value)
    {
    echo "<br>" . $value["user_name"] . "-----" . $value["user_pwd"] . "<br>";  
    }
    //echo $rs["user_name"] . "-----" . $rs["user_pwd"];
    mysql_free_result($rs);
    }unset($rs);
      

  5.   

    //调用第一个存储过程
    $rs1= $DB->hxProc_GetCount("call Puser_count(@tc)");
    返回的是结果集,只有一个值。//调用第二个存储过程
    $rs= $DB->hxProc_GetAll("call Puser_list()");
    返回的是记录集,有多条记录。单独调用哪一个存储过程都是正确的,并可正常输出(打印),两个存储过程放到同一页页调用就出错了,不管先调用哪一个存储过程都一样。有时间的朋友可加我QQ844918366,我给那个类你们,在这里不好上传那个类,因内容多了点。
    谢谢!
      

  6.   

    现在怎么成“Commands out of sync; you can't run this command now”这样的出错信息?
    我又没有改动什么呀。
    如何解决?