【发布时间】: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 usemysql_*functions -
非常感谢!赞赏。
标签: php mysql while-loop