2016-12-13 91 views
-1

我需要執行多個查詢以在PHP(7.0.9)網頁上形成多個圖。當頁面運行時,我可以執行一次sqlsrv_query()。當我嘗試執行了第二遍,我收到此PHP的錯誤:多個查詢在一個PHP頁面

[13-Dec-2016 13:17:26 America/New_York] PHP Fatal error: Maximum execution time of 300 seconds exceeded in C:\File\File\piechart.php on line 249

249線是print_r(array_values($dataa));現在,這只是一個測試,看看變量輸出。這是整個代碼。

<?php 
$connectionInfo = array( "UID" => "form", "PWD" => "-------", "Database" => "-------"); 
$serverName = "--------"; 
$conn = sqlsrv_connect($serverName, $connectionInfo); 
$test = 0; 
ob_start(); 
if ($conn === false) die("<pre>".print_r(sqlsrv_errors(), true)); 
echo "Successfully connected!"; 
ob_end_clean(); 
$sql = "SELECT Defect, COUNT(*) AS Amount FROM dbo.InputData Where Defect IS NOT NULL GROUP BY Defect "; 
$sql2 = "SELECT Comments, COUNT(*) AS Amount FROM dbo.InputData WHERE Comments LIKE '%wav%' OR Comments LIKE '%way%' GROUP BY Comments"; 
$stmt = sqlsrv_query($conn, $sql); 
if(($errors = sqlsrv_errors()) != null) { 
     foreach($errors as $error) { 
      echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />"; 
      echo "code: ".$error[ 'code']."<br />"; 
      echo "message: ".$error[ 'message']."<br />"; 
     } 
    } 
?> 

<!DOCTYPE html> 
<!-- Bunch of HTML code here... --> 
<table width="100%"> 
    <tr> 
     <td> 
     <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> 
      <script type="text/javascript"> 
       google.charts.load('current', {'packages':['corechart']}); 
       google.charts.setOnLoadCallback(drawChart); 
       function drawChart() { 

       var data = google.visualization.arrayToDataTable([ 
        ['Defect', 'Ammount'], 
          <?php while($data = sqlsrv_fetch_array($stmt)) { 
        echo "['" . $data[0]. "', " . $data[1] . "], 
        "; 
       } ?> 
       ]); 

       var options = { 
        title: 'Glass Defects', 
        is3D: true, 
       }; 

       var chart = new google.visualization.PieChart(document.getElementById('piechart')); 

       chart.draw(data, options); 
       } 
      </script> 
      <div id="piechart" style="width: 900px; height: 500px;"></div> 
     </td> 
     <td> 
     <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> 
      <script type="text/javascript"> 
       google.charts.load('current', {'packages':['corechart']}); 
       google.charts.setOnLoadCallback(drawChart); 
       function drawChart() { 

       var data = google.visualization.arrayToDataTable([ 
        ['Defect', 'Ammount'], 
        <?php 
          while($dataa = sqlsrv_fetch_array(sqlsrv_query($conn, $sql2))) { 
          print_r(array_values($dataa)); //Line 249 
          } 
        ?> 
       ]); 

       var options = { 
        title: 'Glass Defects', 
        is3D: true, 
       }; 

       var chart = new google.visualization.PieChart(document.getElementById('piechart')); 

       chart.draw(data, options); 
       } 
      </script> 
     </td> 
    </tr> 
</table> 
<!-- Bunch more HTML... --> 
</html> 

回答

2

您每次啓動while循環時都會再次運行查詢。因此,它會運行無數次,導致腳本超時(如錯誤所述)。取而代之的是:

while($dataa = sqlsrv_fetch_array(sqlsrv_query($conn, $sql2))) { 
    print_r(array_values($dataa)); //Line 249 
} 

這樣做:

$result = sqlsrv_query($conn, $sql2); 
while($dataa = sqlsrv_fetch_array($result)) { 
    print_r(array_values($dataa)); //Line 249 
} 

而且,你也許希望你的代碼的各個部分分開。混合使用HTML,PHP和JavaScript是維護惡夢的祕訣,它使正確測試應用程序幾乎不可能。