在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.
这到底是怎么回事呢?
------解决方案--------------------不能分批执行吗?
------解决方案--------------------关注,顶!