在While循环中执行PHP While循环


Doing a PHP While Loop Inside A While Loop

我正试图在另一个php while循环中执行php while循环,但当我到达第二个循环时,它不会返回到第一个循环并再次重新循环。以下是我正在使用的代码:

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

以下是来自数据库的两个循环:

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>';
            }
            } ?>

使用任何其他名称更改内部循环$row和$result。。例如,我在这里做了$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>';
        }
    }
} 
?>

对于2 while循环,应该为$result使用不同的变量,如$result2。这就是造成冲突的原因。

您用第二个$row/$result覆盖了第一个$row$$result。请尝试为第二组结果使用其他名称。

// 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>';
    }
    } ?>

您应该为内部和外部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>';
        }
    } 
?>