Хорошо, мой синтаксис, вероятно, можно описать без кода. В принципе, это должно быть легко … но никогда не бывает.
У меня есть 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 для «сделать его массив», хотя, гораздо приятнее работать.