2015-07-06 6 views
0

Я не могу понять, как и почему моя команда mysql_query останавливает выполнение. Есть два массива я работаю с:PHP + MySQL внезапно останавливает запрос

  1. routersTree (включает в себя около 100 строк)
  2. даты (включает в себя около 30 клеток)

Вот код:

while ($i <= count($routerTree)){ 
    $currentRouter = $routerTree["router_$i"]; 
    echo "<td>$i</td>"; 
    for ($j = 0; $j < count($dates); $j++) { 
     $sql = "SELECT indications.id_device FROM indications LEFT JOIN routers ON indications.id_device = routers.id_device WHERE routers.id_router = $currentRouter[id_router] AND date(indications.dateField) = '$dates[$j]' ORDER BY routers.id_device"; 
     if ($res = mysql_num_rows(mysql_query($sql))) { 
      echo "<td>$res</td>"; 
      } 
     else { 
      echo "<td>error</td>"; 
      } 
     } 
    } 

enter image description here

Он останавливает мой цикл после 18-го ряда, но есть еще около 82 циклов. Я предполагаю, что существует небольшой тайм-аут для команды mysql_query. Любая помощь была бы оценена.

+1

НИКОГДА не связывайтесь с такими базами данных. Вы просто считаете, что ничто не может пойти не так, как раз, и это НЕПРАВИЛЬНОЕ отношение. даже если ваш синтаксис sql на 100% безупречен, существует буквально бесконечное количество других причин возникновения сбоев. всегда проверяйте успех/неудачу при вызове EVERY db. если запрос завершается с ошибкой, он возвращает логическое значение false для num строк, что также не выполняется. –

+0

Распечатайте запрос, а также номер строки, когда вы увидите ошибку, вам будет предоставлен SQL-код, который он использует, вы должны выяснить, что вызывает ошибку. – psycotik

+0

@MarcB Я сделал оператор if, чтобы проверить, является ли результат истинным, но все еще имеет ту же проблему :(Или, может быть, я неправильно понимаю вас. – JEYCDEE

ответ

0

Ну, после продолжения поиска решения моей проблемы Я, наконец, нашел один. Так просто и так быстро ... Проблема была в тайм-аут PHP. Я просто добавил в мой settings.php файла следующую запись:

ini_set ('max_execution_time', 0); 

Значение по умолчанию составляет 30 секунд. 0 означает бесконечный цикл. Но будьте осторожны с этим. Поднимите значение для ваших нужд, но не используйте бесконечный цикл.

+0

Лучше всего «сбросить» значение в цикле. Если одна итерация занимает 1-2 секунды, тогда поместите эту команду 'ini_set' внутри цикла со значением' 10'. – Marki555

+0

Ну Я согласен с тобой и думал об этом, но все зависит от потребностей. Моя программа нуждается в этом почти везде, поэтому более продуктивным является использование бесконечного таймаута для всей программы. – JEYCDEE

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