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

Chr*_*ten 0 php mysql while-loop fetch

请考虑以下事项:

$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>";
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这只返回一个结果,即使WHILE()循环返回了多个值.该FOREACH()回路工作在所返回的一行.我做错了什么只让这一行返回?$result直接在服务器上执行包含的查询将返回多行.

Mar*_*c B 7

$result在内部和外部循环中使用了两次.当内部循环完成时,$ result将是一个"空"结果集,因此外部循环将终止.选择内循环$result2,事情应该没问题.

但是,由于内部循环只是根据外部循环产生的结果获取更多结果,因此您应该考虑将其重写为连接查询.运行单个"大结果"查询几乎总是比一系列"小结果"单个查询更有效.你最终会有相当大的开销来解析/编译每个内部查询.