【发布时间】:2015-02-20 16:37:14
【问题描述】:
-
while($row=mysqli_fetch_array($result)) { echo $row['sth']; .....}
- $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