2016-12-13 90 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是维护恶梦的秘诀,它使正确测试应用程序几乎不可能。