页面加载很长一段时间后,提交页面
刚刚得到这段代码工作了几个小时的挫折。我知道我在混合使用MySQLI和PDO,但这只是为了让所有的工作都能正常工作 - 我将在发布前将所有内容转换为PDO。这是我的消防部门的调度网页。页面加载很长一段时间后,提交页面
由于某些原因,当我点击“提交”,带我到第二页来运行这些命令时,它会在运行命令之前加载大约2分钟。
下面是响应:
阵列(2){[0] =>串(4) “0004”[ “ID”] =>串(4) “0004”} 致命错误:的用尽67108864个字节允许存储器大小(试图分配608个字节)/home/rhapidfyre/public_html/sasd/supervisor.php线765
765行朝向底部的HTML表单代码,“主管。 php“
if($_GET['call'] == "close")
{
if($_GET['callid'])
{
if($_GET['page'] == 'two')
{
$callid = $_GET['callid'];
$closing = $_POST['closing'];
$query = "SELECT id FROM engaged WHERE callnum = '$callid'";
$getunits = $link->query($query);
$unitsrow = $getunits->fetch_array(MYSQLI_BOTH);
var_dump($unitsrow);
$doit = $db->prepare("UPDATE incidents SET closing = :closing, closer = :myname, active = 0, archive = 1 WHERE id = :callid");
$doit->bindParam(':callid',$callid);
$doit->bindParam(':myname',$myname);
$doit->bindParam(':closing',$closing);
$doit->execute();
$doita = $db->prepare("DELETE FROM engaged WHERE callnum = :callid");
$doita->bindParam(':callid',$callid);
$doita->execute();
for($i = 0;$i < count($unitsrow);$i++) {
$doitb = $db->prepare("UPDATE logins SET assigned = '0' WHERE id = :unitnum");
$doitb->bindParam(':unitnum',$unitsrow[$i]);
$doitb->execute();
}
echo '<script type="text/javascript">window.location = "supervisor.php?finished=closecall"</script>';
}
else
{
$callid = $_GET['callid'];
$prep = $db->prepare("SELECT * FROM incidents WHERE id = :callid");
$prep->bindParam(':callid',$callid);
$prep->execute();
$prepresult = $prep->fetch();
?>
<form action="supervisor.php?do=func&call=close&callid=<?echo $_GET['callid'];?>&page=two" method="POST">
<font color="#FF0">You are closing call #: </font><font color="#FFF"><strong><?echo $_GET['callid'];?></font><br />
<font color="#FF0">Incident Type: </font><font color="#FFF"><strong><?echo $prepresult['type'];?></font><br />
<font color="#FF0">Incident Loc : </font><font color="#FFF"><strong><?echo $prepresult['location'];?></font><br /><br />
<font color="#FF0">CLOSING NOTES:</font><br/>
<textarea rows="6" cols="60" name="closing" /></textarea><br />
<input type="submit" value="SUBMIT!">
</form>
<?
}
}
else
{
$callzactive = mysqli_query($link, "SELECT id,priority,type,location FROM incidents WHERE active = 1");
?>
<font color="#FF0"><strong>SELECT CALL NUMBER</strong></font><br />
<select onChange="window.location.href=this.value">
<option>SELECT</option><?
while($callsactive = mysqli_fetch_array($callzactive))
{
?>
<option value="supervisor.php?do=func&call=close&callid=<?echo $callsactive['id'];?>"><?echo "#".$callsactive['id']." (".$callsactive['priority'].") ".$callsactive['type']." @ ".$callsactive['location'];?></option>
<?
}
?></select><?
}
}
试试看测试删除更新查询在for循环
for($i = 0;$i < count($unitsrow);$i++) {
$doitb = $db->prepare("UPDATE logins SET assigned = '0' WHERE id = :unitnum");
$doitb->bindParam(':unitnum',$unitsrow[$i]);
$doitb->execute();
}
不是一般的速度明智的解决方案。在for循环之前准备语句。正如在这answer在另一个问题。
这并不解决OP的问题,并且最好作为评论。坚持你可以直接回答的问题,直到你有足够的评价声望。 –
感谢您的回复。我会研究这一点。我试了一下,但我仍然得到加载错误,这次是从执行线。我会在稍后尝试。这似乎是循环运行永远,我怀疑“计数($ unitsrow)”部分。 –
为什么假设你的代码的这一部分造成了这种情况?它表示它在该行上的内存不足,但内存可能会填满您向我们展示的代码上方的任何位置。 –
在添加for循环之前,它运行完美无瑕,除了它没有运行for循环,意味着它不更新登录以将其设置为0.其他所有操作都完美无缺。 –
我忘了提及 - 只有一个单位分配时,代码才起作用。它改变分配到零,一切正常,没有任何延迟。如果分配了两个或更多个单元,则分配的零不运行并且延迟。 –