【问题标题】:Appending many mysql_fetch_array results附加许多 mysql_fetch_array 结果
【发布时间】:2015-02-20 16:37:14
【问题描述】:
  1. while($row=mysqli_fetch_array($result)) { echo $row['sth']; .....}

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

当我将第一个 while 循环更改为第二个时,我得到一个无限循环。有没有办法可以在 while 循环之前执行 fetch_array 而不会陷入无限循环?

我尝试这个的原因是……:

所以我通过$_POST 发送了select multiple name=options[]
然后我使用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)) {}

使用此代码,例如当传递一个数组options[option1, option2, option3]时,结果只输出options[option3]的元素。 option1 和 option2 的查询输出在 foreach 循环中被覆盖。
所以我想出了一个尝试在 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

【问题讨论】:

  • 某事告诉我你的设计有问题。通常我真的很鄙视循环内的查询。我通常做的是填充我之前需要的内容(例如获取 ID 列表),然后使用 IN (youridshere) 执行另一个查询。最后但同样重要的是,如果数据不是非常庞大,我更喜欢将其收集到数组中,然后用于其他查询等。 PS:也要清理你的 $_POST ! :)

标签: php mysql loops mysqli foreach


【解决方案1】:

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

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

改变这个:

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 循环。

【讨论】:

  • 这完全是我的问题。我会试一试,然后回复你。谢谢!
  • 更改为 $result[] 后,我在 while($row=mysqli_fetch_array($result)) 上收到 mysqli_fetch_array() expects parameter 1 to be mysqli_resulterror 消息。
  • 检查我编辑的帖子,对不起,那是我的错。我已将结果添加为数组,而不是行。并将$row 重命名为$rows :)
【解决方案2】:

使用 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
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2015-09-04
    • 2016-04-06
    • 2020-02-19
    相关资源
    最近更新 更多