Два фрагмента кода 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), которая в основном пуста и имеет ненулевые значения где-то посередине (если мы сортируем по полю id).
Замена ‘audio1’ другим именем столбца дает правильные результаты (для этого поля) в обоих случаях.
Еще одним дополнением является то, что я действительно помещаю оператор SELECT изначально в mysql_query, который отфильтровывает строки. В зависимости от количества возвращаемых строк изображение для второго примера может немного отличаться, например, 3 неповторяющихся значения с последующим повторением третьего значения до конца.
Я починил это. Короче говоря — это было действительно очевидно: между циклами цикла переменная $ link1 не менялась в случае if
не было true
, Что мне нужно было сделать, это поставить $link1 = "";
или же unset ($link);
сразу после while
и в этом случае, если я когда-либо встречал пустое значение для $row['audio1']
он останется действительно пустым вместо того, чтобы повторно использовать старое значение для каждой новой строки.
Других решений пока нет …