日期:2014-05-18  浏览次数:20530 次

在PHP里调用存储过程查询大量数据,不能正常执行完的问题,急!拜托高手!!!!
我用PHP和SQL数据库,做一个查询系统.在PHP中提供多个限制条件用户随意选择,其中必须包括一个数量(表示用户要选择多少个编号),然后查询符合条件的产品编号,并将产品编号保存成文本.根据限制条件查询出符合条件的编号并生成文本,我是放在一个SQL过程里做的,在过程的最后返回一个数量表示实际有多少编号被选种.然后在PHP中调用这个过程.
global   $database;
$sql= "exec   update_MobileUserInfo   ' ".$_SESSION[ 'loginname ']. " ', ' ".trim($data[CusID]). " ', ' ".$citystr. " ', ' ".$cardstr. " ', ' ".$tmstr. " ', ' ".$pricstr. " ', ' ".$data[SelType][0]. " ', ' ".$data[RepYN][0]. " ', ' ".trim($data[IdeNum]). " ', ' ".$sexs. " ', ' ".$sexl. " ' ";
$all=$database-> GetOne($sql);
if   ($all)
  {  
          $result=array($all,$filename);
          return   $result;
  }else   {
          $this-> error   =   "查询结果为空 ";
          return   false;
    }
查询大体是这么写的:
SET   @strSql= 'Insert   Into   ##ServiceTemp(MobileNO)   SELECT   top   '+@IdeNum+ '   MobileNO   '
SET   @strSql=@strSql+ 'FROM   A,B,C '
SET   @strSql=@strSql+ '   where   A.MobileCard=B.ID   and   A.MobileType=C.ID   and   '+@str
SET   @strSql=@strSql+ '   order   by   MobileNO   '
SET   @strSql=@strSql+@str3
exec   (@strSql)
if   @@error   <>   0
begin
        DROP   TABLE   ##ServiceTemp  
        return   -1
end
@str是根据传递到过程的参数组合的一个限制条件,我将查询出的具体编号放到全局临时表里等待输出.
上面的代码省略了很多,包括对全局临时表的操作.我为了测试,在过程的最后返回一个具体非零值5.这样就是查询还是按照实际情况查询,但返回的都是成功,5.
目前查询的A表数据有几千万.
症状是当用户输入的想查询的编号数量比较大时,如30万,实际数据库中有足够的数据.可PHP返回的有时就是我设定的5,有时就是;查询结果为空.非常不稳定.另外,我将PHP里生成的调用过程的串,放到查询分析器里执行,无论执行几次,都能成功返回5.
这到底是怎么回事呢?

------解决方案--------------------
不能分批执行吗?
------解决方案--------------------
关注,顶!