PHP小白,请问各位大牛,。
这个while里面的fetch_assoc;是查到数据库里所有符合条件的记录后才停止while循环吗?手册上说fetch_assoc每次只查询一条记录,如果while里面再调用loopMore()这个函数本身,那么又重新开始了,那么fetch不是只能查到一条记录就重新开始再一次执行函数了,那样不是不完整吗

解决方案 »

  1.   

    一般的做法是先取出所有的表数据$res,loopMore函数传参时,传$pid,$res,$space。
    你写的sql语句里是pid = {$pid},那么取出的本来就是一条数据。但是每次函数return的$res,你没有用array_merge进行合并,结果上肯定是有问题的
      

  2.   

    这个看起来没有错
    fetch_assoc是一次读取一行,并且指针后移一位,到最后就为空了,while的判断就是false就跳出循环
    A、你先按最后一级来考虑,即末尾没有下级了
    那么进入下一级的loopmore后其实sql是空数据,于是直接返回
    (loopmore怎么没有返回值啊?)
    B、然后现在考虑包含下一级的情况
    1,2,21,22,3
    fetch到了2的时候,进入loopmore
    这个时候sql查出来有21、22,于是继续这一级别的while到21,而21、22其实是没有下一级的,这实际上回到了情况A,于是按照情况A处理,loopmore处理完后,继续while循环,到22,然后继续
    C、对于多级分类,按照B算,如果有下一级,再按照B算,没有下一级,就按照A算。即你的sql实际查询输出是:
    第一次1、2、3
    第二次 null(1)
    第3次21、22
    4: null(3)
    但是
    你执行的顺序却是:1(、null)、2、21、22、3(、null)
      

  3.   

    外层不是有while循环吗,怎么会不完整呢。