Это потому, что вы выполняете запрос каждый раз, когда вызываете функцию fetchAssoc (по крайней мере, это то, что я думаю, что setResult должен делать при просмотре вашего кода). После сброса запроса вы возвращаете первую ассоциацию из результата, которая приводит к массиву. Поскольку он продолжает приводить к первой ассоциации вашего результирующего набора, код продолжает цикл до тех пор, пока не будет достигнуто время max_execution.
fetchAssoc не должен делать ничего, кроме как вернуть mysql_fetch_assoc для этого-> результата, если я правильно понимаю ваш код.
Я сломаю это для вас:
//first lines of fetchAssoc
if($q == NULL)
{
$q = $this->query;
}
в фрагменте кода, использующем эту функцию, вы не передаете $ q, поэтому $ q всегда является $ this-> query.
$this->setResult($q);
Затем вы вызываете setResult, который в соответствии с вашим собственным комментарием выполняет запрос и устанавливает this-> result. Поэтому, если вы вызываете функцию fetchAssoc, запрос $ this-> выполняется каждый раз, и каждый раз результат обновляется с результатом для этого запроса.
if($q == NULL || mysql_num_rows($this->result) < 1)
{
return NULL;
}
else
{
return mysql_fetch_assoc($this->result);
}
Поскольку $ q никогда не может быть нулевым (вы дали ему значение в этом случае ранее), единственная проверка здесь - на num_rows. Пока это так, вы возвращаете первую строку $ this-> result с fetch_assoc. Это всегда одна и та же строка, поскольку вы обновляете запрос и результат, а также каждый вызов.