2016-05-16 123 views
0

我想做一个php while循环内另一个php while循环,但当我到第二个循环它不会回到第一个和再次回到这里是我正在使用的代码:做一个PHP虽然循环内while循环

数据库连接字符串位于单独的模块中。第一个while循环应循环两次,但我认为当它到达第二个数据库while循环时发生,该循环返回正值,它会影响第一个循环,所以我只从第一个循环获得1循环。有人可以告诉我如何改变这个以避免这个问题吗?

这是下面的两个循环从数据库:

while($row = $result->fetch_assoc()) { 

    // Show/Hide Regions: 

    error_reporting(-1); 
    ini_set('display_errors', 'On'); 

    //Access our class. 
    $db_Class = new db_Class; 
    $conn = ($db_Class->db_conn()); 

    $sql = "SELECT id, region FROM tbl_region;"; 
    $result = $conn->query($sql); 

      if ($result->num_rows > 0) { 
     // output data of each row 
     $counter = 0; //Set count to 1 
     while($row = $result->fetch_assoc()) { 
      $counter++; //Increment counter by 1's 
      $rID = $row["id"]; 
      ?> 
       Output Region Here! 

       <?php 

      //Output companies for this region. 

      $sql = "SELECT 
        tbl_company.company_name, 
        tbl_company.group_number, 
        tbl_region.region 
        FROM 
        tbl_region 
        INNER JOIN tbl_company ON tbl_company.region_id = tbl_region.id 
        WHERE 
        $rID = tbl_company.region_id 
        ORDER BY 
        tbl_company.company_name ASC 
        "; 
      $result = $conn->query($sql); 

      if ($result->num_rows > 0) { 
       // output data of each row 
       while($row = $result->fetch_assoc()) { 

        echo $row["company_name"]."<br>"; 

        } 
       } 
      echo "A"; 
      echo '</div>'; 
      } 
      } ?> 
+2

您应该对$ row和$ result使用不同的变量。两个循环都不一样。 –

+0

我不确定,但在使用相同的$行变量的两个查询中可能存在问题,请您更改并尝试。 –

回答

3

变化内环$行和$与任何其他name..for比如我做了$ rowInner和$ resultInner这里产生。

<?php 
while($row = $result->fetch_assoc()) { 
    if ($result->num_rows > 0) { 
     $counter = 0; //Set count to 1 
     while($row = $result->fetch_assoc()) { 
      $counter++; //Increment counter by 1's 
      $rID = $row["id"]; 
      ?> 
       Output Region Here! 

      <?php 
      $sql = "SELECT 
        tbl_company.company_name, 
        tbl_company.group_number, 
        tbl_region.region 
        FROM 
        tbl_region 
        INNER JOIN tbl_company ON tbl_company.region_id = tbl_region.id 
        WHERE 
        $rID = tbl_company.region_id 
        ORDER BY 
        tbl_company.company_name ASC 
        "; 
      $resultInner = $conn->query($sql); 
      if ($resultInner->num_rows > 0) { 
       while($rowInner = $resultInner->fetch_assoc()) { // Change $row to $rowInner 
        echo $rowInner["company_name"]."<br>"; 

       } 
      } 
      echo "A"; 
      echo '</div>'; 
     } 
    } 
} 
?> 
+0

这样做我认为这是问题,但不知道我是否可以更改名称。谢谢!! –

1

你应该使用不同的变量$result$result2 2 while循环。这是造成冲突。

0

您用第二个$ row/$结果覆盖了第一个$ row/$结果。尝试为第二组结果使用不同的名称。

// Show/Hide Regions: 

error_reporting(-1); 
ini_set('display_errors', 'On'); 

//Access our class. 
$db_Class = new db_Class; 
$conn = ($db_Class->db_conn()); 

$sql = "SELECT id, region FROM tbl_region;"; 
$result = 

$conn->query($sql); 

    if ($result->num_rows > 0) { 
// output data of each row 
$counter = 0; //Set count to 1 
while($row = $result->fetch_assoc()) { 
    $counter++; //Increment counter by 1's 
    $rID = $row["id"]; 
    ?> 
     Output Region Here! 

     <?php 

    //Output companies for this region. 

    $sql = "SELECT 
      tbl_company.company_name, 
      tbl_company.group_number, 
      tbl_region.region 
      FROM 
      tbl_region 
      INNER JOIN tbl_company ON tbl_company.region_id = tbl_region.id 
      WHERE 
      $rID = tbl_company.region_id 
      ORDER BY 
      tbl_company.company_name ASC 
      "; 
    $result2 = $conn->query($sql); 

    if ($result2->num_rows > 0) { 
     // output data of each row 
     while($row2 = $result2->fetch_assoc()) { 

      echo $row2["company_name"]."<br>"; 

      } 
     } 
    echo "A"; 
    echo '</div>'; 
    } 
    } ?> 
0

您应该对内部和外部的while循环使用不同的变量。请尝试以下操作:

<?php 
    // Show/Hide Regions: 

    error_reporting(-1); 
    ini_set('display_errors', 'On'); 

    //Access our class. 
    $db_Class = new db_Class; 
    $conn = ($db_Class->db_conn()); 

    $sql = "SELECT id, region FROM tbl_region;"; 
    $resultOuter = $conn->query($sql); 

    if ($resultOuter->num_rows > 0) 
    { 
     // output data of each row 
     $counter = 0; //Set count to 1 
     while($rowOuter = $resultOuter->fetch_assoc()) 
     { 
      $counter++; //Increment counter by 1's 
      $rID = $rowOuter["id"]; 

      //Output companies for this region. 

      $sql = "SELECT tbl_company.company_name, tbl_company.group_number, tbl_region.region 
        FROM tbl_region 
        INNER JOIN tbl_company ON tbl_company.region_id = tbl_region.id 
        WHERE 
        $rID = tbl_company.region_id 
        ORDER BY 
        tbl_company.company_name ASC "; 

      $resultInner = $conn->query($sql); 

      if ($resultInner->num_rows > 0) 
      { 
       // output data of each row 
       while($rowInner = $resultInner->fetch_assoc()) 
       { 
        echo $rowInner["company_name"]."<br>"; 

       } 
      } 
      echo "A"; 
      echo '</div>'; 
     } 
    } 
?>