在PHP中调用(循环)MySQL行列表会产生意外结果

时间:2014-11-26 20:21:15

标签: php mysql loops while-loop repeat

两段PHP代码片段:

第一个工作正常,顺序给出不同行的值。

while ($row = mysql_fetch_assoc($rst)) {
...
$link1 = $row['audio1'];
    if ($link1) {
    $link1 = $link1;
    }
...
}

第二行输出第一行的值并将其应用于后续的每一行。

while ($row = mysql_fetch_assoc($rst)) {
...
if ($row['audio1']) {
    $link1 = $row['audio1'];
    }
...
}

即。第一个代码示例生成的位置

Audio1.mp3
Audio2.mp3
Audio3.mp3

第二个会生成

Audio1.mp3
Audio1.mp3
Audio1.mp3

问题是为什么这两个类似的实现在输出上有所不同。

删除了另一个测试用例(干净循环代码)产生了不同的图片:第一个例子只输出一行(第一个),第二个例子的输出是相同的重复行

正在使用的MySQL表具有以下结构: 一张桌子, INT(id),CHAR,SMALLINT,TINYTEXT,TEXT,TEXT,TINYTEXT(audio1)。所有行都是完全填充的,除了最后一个(audio1),它们大部分是空的,并且在中间某处有非NULL值(如果我们按id字段排序)。 更换' audio1'在两种情况下,使用另一个列名称可以得到正确的结果(对于该字段)。

另外一个补充是我确实在mysql_query中最初放置了一个过滤掉行的SELECT语句。根据返回的行数,第二个示例的图片可能略有不同,例如3个非重复值,然后重复第三个值直到结束。

1 个答案:

答案 0 :(得分:0)

我修好了。长话短说 - 非常明显:循环周期之间$ link1变量在if不是true的情况下没有变化。我需要做的是在$link1 = "";之后放置unset ($link);while,在这种情况下,如果我遇到$row['audio1']的空值,它将保持真正的空而不是为每个新行重用旧值。