PHP – несколько while ($ row = mysql_fetch_array (переменная $)) {} ОШИБКИ

Хорошо, мой синтаксис, вероятно, можно описать без кода. В принципе, это должно быть легко … но никогда не бывает.

У меня есть 2 цикла подряд … в основном то же самое. I SELECT * каждая переменная из моей базы данных, а затем мне нужно построить 2-слойный javascript на основе двух sep. переменные.

Так

У меня есть:

while ($row = mysql_fetch_array($myVariable)) { // do events } 

затем после этого

 while ($row2 = mysql_fetch_array($myVariable)) { // do events } 

По какой-то причине он полностью возвращает НИЧЕГО во второй … есть некоторые, где мне нужно сбросить свой массив, возможно ли это завершить, а затем я не могу просто перезапустить. Такой основной вопрос, но я не могу понять, что еще может быть неправильно для моей жизни. Таким образом, возникает вопрос, является ли общая проблема просто делать это дважды в строке и ожидать, что PHP будет запускаться каждый раз в начале $ myVariable, который содержит инструкцию SELECT?

Спасибо … проверит весь день и обновит по мере необходимости. Первый таймер для переполнения стека, я бы хотел увидеть помощь.

Проблема в том, что запрос возвращает ресурс . У этого ресурса есть собственный внутренний указатель (счетчик, чтобы помнить, какую строку возвращать). mysql_fetch_array будет продвигать этот внутренний указатель и возвращать каждую строку из ресурса по одному за раз. как только он заканчивается (осталось больше строк), он возвращает false. поэтому в последнем цикле $ row равно false, который выходит из цикла while. Однако указатель не сбрасывается. Итак, в следующем цикле while вы вызываете mysql_fetch_array, указатель находится в конце и поэтому возвращает false, который полностью обходит второй цикл while. То, что вы должны сделать, – это циклический анализ данных один раз и сохранение каждой строки в массив. Затем вы можете скопировать / петлю по массиву столько, сколько хотите, и все работает так, как ожидалось.

 $data = array(); while ($row = mysql_fetch_array($myVariable)) { $data[] = $row; } //now $data has all the rows. a simple foreach will loop over the data. foreach($data as $row){ //do events print_r($row); } //and you can loop over data again and again. foreach($data as $row){ //do events print_r($row); } 

Перед вторым циклом попробуйте использовать mysql_data_seek() :

 mysql_data_seek($myVariable, 0); 

Указатель в наборе записей должен быть сброшен, иначе он все равно укажет, что он в конце.

Возможно, это лучший вариант, как указывает ZiTAL, хранить ваши записи в массиве и просто перебирать массив.

Если ваши петли вложены и предполагается, что $ myVariable одинаково для обоих циклов, просто скопируйте его, а затем каждый раз перебирайте другую копию.

 $myVariable = mysql_result($query); $myVariable2 = $myVariable; while ($row = mysql_fetch_array($myVariable)) { while ($row = mysql_fetch_array($myVariable2)) { ... 

Другой +1 для «сделать его массив», хотя, гораздо приятнее работать.