【问题标题】:Invoking (looping through) a list of MySQL rows in PHP gives unexpected result在 PHP 中调用(循环)MySQL 行列表会产生意想不到的结果
【发布时间】:2014-11-26 20:21:14
【问题描述】:

两个sn-ps的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

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

另一个删除 ...s 的测试用例(干净的循环代码)产生了不同的画面:第一个示例仅输出一行(第一行),第二个示例的输出与重复行相同。

正在使用的 MySQL 表具有以下结构: 一张桌子, INT (id)、CHAR、SMALLINT、TINYTEXT、TEXT、TEXT、TINYTEXT (audio1)。除了最后一行(audio1)之外,所有行都被完全填充,它大部分是空的,并且在中间的某个地方有非 NULL 值(如果我们按 id 字段排序)。 在这两种情况下,将“audio1”替换为另一个列名会产生正确的结果(对于该字段)。

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

【问题讨论】:

  • 您发布的部分确实是等效的。因此,错误必须隐藏在 ... 某处...
  • 应该没有任何区别。第一个有点毫无意义:if (value is non-falsey) { value = value }.
  • if ($link1) {$link1 = $link1;} ...什么?
  • 是的,对不起,看起来很奇怪,实际上不是$link=$link,那行是将单元格的内容包装到标签中,即
  • 编辑您的帖子并放置完整的代码块。您发布的内容并不表明问题..

标签: php mysql loops while-loop repeat


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-04-05
    • 2015-07-22
    • 2020-05-07
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多