mysql_fetch_assoc()只适用于WHILE循环中的一次迭代


mysql_fetch_assoc() only works for one iteration in WHILE loop

请考虑以下事项:

$query = "SELECT legIDs FROM trip";
$result = mysql_query($query) or die("SELECT TRIPS ERROR: " . mysql_error());
while($row = mysql_fetch_assoc($result) or die("fetch error " . mysql_error())) {
    echo "<div style='"border: 1px solid blue;float:left;'">Trip: <div style='"float:right;'">";
    $legID = explode(",", $row['legIDs']);
        foreach($legID as $leg) {
            $query = "SELECT dep, arr FROM leg WHERE `Key` = " . $leg;
            $result = mysql_query($query) or die("SELECT LEGS ERROR: " . mysql_error());
            $row2 = mysql_fetch_assoc($result) or die("FILL ARRAY ERROR: " . mysql_error());
            echo $row2['dep'] . " - " . $row2['arr'] . "<br />";
    }
    echo "</div></div>";
}

由于某些原因,即使WHILE()循环返回了多个值,也只返回一个结果。FOREACH()循环处理返回的一行。我是不是做错了什么,只把这个回车放在一排?直接在服务器上执行$result中包含的查询会返回几行。

在内部和外部循环中使用$result两次。。当内部循环完成时,$result将是一个"空"结果集,因此外部循环将终止。C将内部循环更改为$result2,一切都会好起来。

但是,由于内部循环只是根据外部循环产生的结果获取更多结果,因此应该考虑将其重写为联接查询。运行单个"大结果"查询几乎总是比运行一长串"小结果"单个查询更高效。解析/编译每个内部查询的开销都相当大。

这是非常混乱的东西。

  1. while($row = mysql_fetch_assoc($result) or die("FETCH ERROR: " . mysql_error()))

    不需要or die()。如果mysql_fetch_assoc返回false,则while循环应该结束,您也不需要die

  2. 基于其他SQL查询的循环中的SQL查询通常可以通过原始查询中更好的JOIN或通过生成更智能的辅助查询来更好地处理
  3. 您在内部循环中覆盖了外部循环的$result变量,这可能是您所询问的特定问题的原因
  4. 您应该将数据获取与输出分开。首先进行查询以获取所有必要的数据,然后将其输出到<div>s中。混合表示逻辑和后端逻辑很快就会变得非常混乱