【问题标题】:mysql_fetch_array while loopmysql_fetch_array while 循环
【发布时间】:2025-11-28 06:00:02
【问题描述】:

我有一个包含另一个 while 循环的 while 循环。两个循环都在迭代不同的 mysql 结果集。问题是外部while循环第二次调用内部while循环时它没有运行。 Mysql_fetch_row 迭代后会丢弃自己吗?

代码如下:

$counter = 0;
while ($r = mysql_fetch_row($result)){
    $col = "";
    $val = "";
    while($d = mysql_fetch_row($dictionary)){
        $key = $d[0];
        for($i= 0; $i< count($tableColumNames); $i++){
            if($tableColumNames[$i] == $key){
                $col .= "`".$d[1]."` ,";
                $val .= "`".$r[$i]."` ,";
                /* echo $tableColumNames[$i]." table ColumnName <br>";
                echo $d[1]." key<br>"; */               
            }           
        }
        echo $key."round".$counter."<br>";
    }
    var_dump ($col);
    var_dump ($val);
    $counter++;
    echo $counter;
}

输出是这样的:您可以看到 $result 包含四个记录,并且输出显示循环正常工作。但是,$dictionary 结果集的内部循环不会在 $result 第二次被迭代时运行。任何想法为什么?我也尝试使用 mysql_fetch_array 但结果仍然相同。

谢谢

【问题讨论】:

  • $dictionary 结果资源中返回了多少行?每次调用mysql_fetch*() 函数之一时,结果资源的内部指针都会前移。如果您打算一遍又一遍地使用同一行,则需要使用mysql_data_seek() 倒带资源,但最好先将其所有行存储在一个数组中并使用它来循环(而不是做你的主要循环结果资源时的逻辑)
  • BUT...请同时显示创建这两个结果资源的两个查询。查询是否相关,以便可以将它们组合成一个 JOIN 查询,从而消除许多复杂的循环逻辑?
  • mysql_data_seek() 工作。它不会存在于应用程序中,我只需要一些帮助来重组数据源,并且正在使用 php 来帮助我做到这一点。所以 mysql_data_seek() 会做得很好。谢谢!
  • 好的。您应该继续并在下面发布您自己的答案,说明您是如何解决的。还有一个标准的免责声明:旧的mysql_*() 函数已被弃用,不应用于新代码。如果可能,考虑切换到 MySQLi 或 PDO -> Why shouldn't I use mysql_* functions
  • 非常感谢!赞赏。

标签: php mysql while-loop


【解决方案1】:

当您调用 mysql_fetch_row($dictionary) 时,它会为您提供行中特定列的详细信息,并将其从 $dictionary 数组中删除。

因此没有元素可供下次使用。

不是在外面声明 $dictionary 而是在 while 循环中声明它。它会解决你的问题。

$counter = 0;
while ($r = mysql_fetch_row($result)){
$col = "";
$val = "";
$dictionary=("Select * from database");//your own logic
while($d = mysql_fetch_row($dictionary)){
    $key = $d[0];
    for($i= 0; $i< count($tableColumNames); $i++){
        if($tableColumNames[$i] == $key){
            $col .= "`".$d[1]."` ,";
            $val .= "`".$r[$i]."` ,";
            /* echo $tableColumNames[$i]." table ColumnName <br>";
            echo $d[1]." key<br>"; */               
        }           
    }
    echo $key."round".$counter."<br>";
}
var_dump ($col);
var_dump ($val);
$counter++;
echo $counter;
}

或者你可以使用 mysql_data_seek()

【讨论】: