附加了许多mysql_fetch_array结果

时间:2014-12-22 14:53:11

标签: php mysql loops mysqli foreach

  1. while($ row = mysqli_fetch_array($ result)){echo $ row ['sth']; .....}

    1. $ row = mysqli_fetch_array($ result); while($ row){echo $ row ['sth']; .....}
  2. 当我第一次改变循环到第二次时,我得到一个无限循环。有没有办法在while循环之前做fetch_array而没有得到无限循环?

    我正在尝试这个的原因是......:

    所以我通过select multiple name=options[]传递$_POST 然后我使用foreach($_POST['options'] as $option)来选择其字段值与$option匹配的索引。之后,如果我按照上面的1.执行while循环,我只会得到最后options[]的元素。
    所以我想将mysqli_fetch_array的结果附加到数组$row,然后像2.那样执行一个while循环但是我得到一个无限循环,如上所述。

    我知道我的解释有点令人困惑....如果到目前为止还不清楚,请在下面阅读更多内容。我在提供更多代码时会详细解释。

    ========================================================================
    if(isset($_POST['options'])) {
        foreach($_POST['options'] as $option) {
                $query = "SELECT * FROM users WHERE stdYr = '$option'";
                $result = mysqli_query($db_conx, $query) or die("Error in ".$query."<br>".mysqli_error($db_conx));
            }
        }
    }
    while($row=mysqli_fetch_array($result)) {}
    

    使用此代码,例如,当传递数组选项[option1,option2,option3]时,结果仅输出选项[option3]的元素。在foreach循环中覆盖option1和option2的查询输出 所以我想出了一个尝试在foreach循环中声明fetch_array并附加到$ result的结果:

    ========================================================================
    if(isset($_POST['options'])) {
        foreach($_POST['options'] as $option) {
                $query = "SELECT * FROM users WHERE stdYr = '$option'";
                $result = mysqli_query($db_conx, $query) or die("Error in ".$query."<br>".mysqli_error($db_conx));
                $row.=mysqli_fetch_array($result)
            }
        }
    }
    while($row) {}
    

    但是会导致无限循环.....

    有人可以帮忙吗?如果这没有意义,请告诉我......谢谢! :d

2 个答案:

答案 0 :(得分:1)

使用do-while而不是while。这样你可以将第一个mysql_fetch_array()调用移出循环:

<?php
    // code
    $row=mysql_fetch_array($result);
    if($row) {
        do
            echo $row["sth"];
        while($row=mysql_fetch_array($result));
    }
    //code
?>

答案 1 :(得分:0)

问题是,你总是在循环中覆盖你的变量。将它用作数组。

编辑:我的错,我已将结果添加为数组,而不是行。

改变这个:

foreach ($_POST['options'] as $option) {
    $query = "SELECT * FROM users WHERE stdYr = '$option'";
    $result = mysqli_query($db_conx, $query) or die("Error in " . $query . "<br>" . mysqli_error($db_conx));
    $row[] = mysqli_fetch_array($result);
}

(在[]之后添加$row,现在它是$row[]。在循环之外,说var_dump($row);

在此之后,您可以设置新的foreach循环。不要添加while循环。