【问题标题】:php variable results in while loop displaying data in infinite loopphp变量导致while循环在无限循环中显示数据
【发布时间】:2013-01-20 21:35:16
【问题描述】:

我对这些 sn-ps 代码在 while 循环中显示结果的不同之处感到困惑。代码的第一个 sn-p 运行良好,但第二个显示结果,但在无限循环中这样做,只是重复结果。谁能给我解释一下为什么?

$stmt = $db_conn->prepare($sql);

$stmt->execute(array("Lorna", 3));

while($result = $stmt->fetch()){
    echo $result["name"] . "<br />" . $result["description"] . "<br />";        
}

如果我将 $stmt->fetch() 放入名为 $data 的变量中并尝试传递它而不是仅将 $stmt->fetch() 放入 while 循环中,我会得到一个无限循环。

$stmt = $db_conn->prepare($sql);

$stmt->execute(array("Lorna", 3));

$data = $stmt->fetch();

while($result = $data){
    echo $result["name"] . "<br />" . $result["description"] . "<br />";        
}

提前致谢!

【问题讨论】:

    标签: php loops pdo while-loop


    【解决方案1】:

    如果是对fetch() 的调用,它会使行前进。

    案例1

    while($result = $stmt->fetch()){
        //every iteration executes fetch
        //advances it by one row
        //turns to false when no more rows
    }
    

    案例2

    $data = $stmt->fetch();
    //now at first row
    while($result = $data){
        //always at first row 
        //always evaluates to true (no calls to fetch)
    }
    

    【讨论】:

      【解决方案2】:

      在第一个代码sn-p中,每次调用while,查询结果指针都会移动到新的一行。最终指针将到达结果集的末尾,$stmt-&gt;fetch() 将返回 false 并结束循环。

      在第二个循环中,您只迭代到下一行一次 - 在循环之前。然后循环将一遍又一遍地迭代同一个循环,因为没有任何变化,因此循环条件永远不会返回 false。

      【讨论】:

        【解决方案3】:

        第一个循环检查函数返回的值是否为空,导致循环结束。

        第二个循环只是做一个赋值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-19
          • 2016-02-14
          • 1970-01-01
          相关资源
          最近更新 更多