2016-07-23 81 views
0

剛剛得到這段代碼工作了幾個小時的挫折。我知道我在混合使用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><? 
    } 
} 
+0

爲什麼假設你的代碼的這一部分造成了這種情況?它表示它在該行上的內存不足,但內存可能會填滿您向我們展示的代碼上方的任何位置。 –

+0

在添加for循環之前,它運行完美無瑕,除了它沒有運行for循環,意味着它不更新登錄以將其設置爲0.其他所有操作都完美無缺。 –

+0

我忘了提及 - 只有一個單位分配時,代碼才起作用。它改變分配到零,一切正常,沒有任何延遲。如果分配了兩個或更多個單元,則分配的零不運行並且延遲。 –

回答

-1

試試看測試刪除更新查詢在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在另一個問題。

+0

這並不解決OP的問題,並且最好作爲評論。堅持你可以直接回答的問題,直到你有足夠的評價聲望。 –

+0

感謝您的回覆。我會研究這一點。我試了一下,但我仍然得到加載錯誤,這次是從執行線。我會在稍後嘗試。這似乎是循環運行永遠,我懷疑「計數($ unitsrow)」部分。 –