在C:\wamp64\www中超过120秒的最大执行时间。
我希望我的循环不是无限的。
if(isset($_POST['del']))
{
$id = $_GET['id'];
$st = "Y";
$stmtp = $user_home->runQuery('SELECT * FROM invoice WHERE BRN = :inv ORDER BY Sr ASC ');
$stmtp->bindParam(':inv',$id);
$stmtp->execute();
$rowcd = $stmtp->fetch(PDO::FETCH_ASSOC);
if($stmtp->rowCount() > 0)
{
while($rowcd)
{
extract($rowcd);
$stmtd = $user_home->runQuery('UPDATE invoice
SET State=:uname
WHERE Sr = :crn');
$stmtd->bindParam(':crn',$Sr);
$stmtd->bindParam(':uname',$st);
$stmtd->execute();
}
}
}Select语句有5行。(有时它可能会少一些)
发布于 2017-11-29 12:09:00
这是一个无限的循环。
你在做:
$rowcd = $stmtp->fetch(PDO::FETCH_ASSOC);然后评估它:
while($rowcd)当它应该是:
while($rowcd = $stmtp->fetch(PDO::FETCH_ASSOC))而不是两行
发布于 2017-11-29 12:08:35
从bindParam()的用法来看,我假设您使用的是抽象到类中的PDO。
您只调用一次fetch(),它只返回一行,然后对其使用while语句。它永远不会在循环中得到更新,因此它总是计算为TRUE,从而继续循环。
要测试这一理论,可以在数组上运行一个简单的循环,该循环一直运行到断点:
<?php
while(array(1,2,3)){
echo date('H:i:s');
}我不完全确定$Sr变量来自何处,但根据第一个查询中的ORDER BY子句,它将在第一个查询中返回。
因此,每次都需要循环遍历并获取下一行,如下所示:
...
while ($row = $stmtp->fetch()) {
$stmtd = $user_home->runQuery('UPDATE invoice
SET State=:uname
WHERE Sr = :crn');
$stmtd->bindParam(':crn',$row['Sr']);
$stmtd->bindParam(':uname',$st);
$stmtd->execute();
}
...https://stackoverflow.com/questions/47552203
复制相似问题