2016-07-23 6 views
0

ちょうどこのコードが2時間の不満の後に働いています。私はMySQLIとPDOを混在させていることを知っていますが、それはすべての機能を有効にするだけです。リリース前にすべてをPDOに変換します。これは、私の団体の消防署のための派遣ウェブページです。ページの送信時に非常に長い時間のページロード

何らかの理由で、「送信」をクリックして2ページ目に移動してコマンドを実行すると、コマンドを実行する前に約2分間ロードされます。ここ

は応答である:

アレイ(2){[0] =>列(4) "0004" [ "ID" =>列(4) "0004"} 致命的なエラー:排出67108864バイトの許容メモリサイズは、スーパーバイザ」ため、

ライン765は、底部に向かってHTMLフォームのコードであるライン765上/home/rhapidfyre/public_html/sasd/supervisor.phpに(608のバイトを割り当てることを試みました)。 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つだけ割り当てられている場合に機能します。それはゼロに割り当てられた変更、すべての遅滞なく、動作します。 2つ以上のユニットが割り当てられている場合、割り当てられたゼロは実行されず、遅延します。 –

答えて

-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

返事をありがとう。私はそれを調べます。私はそれを試してみましたが、私はまだ行を実行してから、ロードエラーを取得します。私は後で試してみる。ループは永遠に実行されているように見えますが、それはそのための "count($ unitrow)"部分と思われます。 –

関連する問題