2010-08-10 2 views
1

У меня есть следующий код: (запрос добавляется)Потеря MySQL результат ресурс после первого использования

$weight_table = mysql_query ("SELECT * FROM ".$prefix."weight ORDER BY wlimit DESC");  
foreach ($weight as $area => $weight) { 
     echo $weight; 

     while ($weight_row = mysql_fetch_array($weight_table)) { 
      print_r($weight_row); 
      $limit = $weight_row['wlimit']; 
      if ($weight < $limit) { 
     $weight_level[$count] = $weight_row; 
      } 
     } 
    } 
    print_r($weight_level); 

Где $ weight_table является результатом запроса MySQL и $ веса является массивом.

Моя проблема заключается в том, что $ weight_table, кажется, истекает после первого цикла while, так что массив $ weight эффективно обрабатывается как имеющий один элемент. Это проблема!

Может кто-нибудь предложить, почему php забудет результат mysql после первого использования?

+0

Я не хотел предлагать это. Я имел в виду, что не получить правильный результат был проблемой. Я просто предположил, что где-то был неправильный флаг. – YsoL8

ответ

2

Первая итерация через цикл for вы извлекаете все записи из набора результатов mysql. Ваш внутренний цикл while будет работать до тех пор, пока все строки не исчезнут. Сколько строк вы хотите вытащить?

Также вы повторно используете $ weight, что является плохой идеей и может вызывать побочные эффекты.

foreach ($weight as $area => $wt) { 
    echo $wt; 

    while ($weight_row = mysql_fetch_array($weight_table)) { 
     print_r($weight_row); 
     $limit = $weight_row['wlimit']; 
     if ($wt < $limit) { 
     $weight_level[$count] = $weight_row; 
     } 
    } 

    mysql_data_seek($weight_table,0); 
} 
print_r($weight_level); 
+0

Я хочу вытащить все, раз для каждого значения в массиве $ weight. Кажется, он сдался после первого значения. Также изменилась переменная $ weight, как указано выше. – YsoL8

+0

Есть ли что-нибудь в настройках php, которые могут повлиять на это? Я думаю, что это работало некоторое время назад. – YsoL8

+0

@ YsoL8: Ваш MySQL-запрос (и результат) в порядке? – fabrik

1

Вы переопределите массив $weight в объявлении foreach. Используйте вместо этого $area => $_weight.

0
while ($weight_row = mysql_fetch_array($weight_table)) { 
    print_r($weight_row); 
    foreach ($weights as $area => $weight) { 
     echo $weight; 
     $limit = $weight_row['wlimit']; 
     if ($weight < $limit) { 
      $weight_level[$count] = $weight_row; 
     } 
    } 
} 
print_r($weight_level); 

Использование $ веса массива как $ веса

+0

Переключение петель while и foreach искажает содержимое $ weight_level – YsoL8

0
foreach ($weight as $area => $weight) { 

Вы перезапись, что было в вашем $height массиве, поэтому он истекает после первого запуска через вашу петлю. Попробуйте использовать другое имя переменной для того или другого.

Смежные вопросы