Есть проблема с:
while($row=mysql_fetch_array($result, MYSQL_ASSOC))
{
$referrer=$row['referrer'];
$export=array();
foreach($this->tablefields as $val){
$export[$val] = $row[$val];
}
}
Вы заменяете свой экспортный массив на каждой итерации - это ваше намерение? Данные выбрасываются для всех, кроме последней строки. Затем вы делаете это снова в этом блоке:
if($referrer != "0" && $referrer != "")
{
$result2=mysql_query("select * from " . $this->dbtablename . " where " . $this->id_field . " ='$referrer'", $this->dbConnectionID);
while($row2=mysql_fetch_array($result2, MYSQL_ASSOC))
{
$export=array();
foreach($this->tablefields as $val){
$export[$val] = $row2[$val];
}
}
}
Если вы (а) получаете только последний ряд данных и (б) перезаписываете данные из первого блока (возможно, этот последний необходим).
И, наконец, если вы когда-нибудь попадете в этот блок (реферер не равен нулю в первый раз через ваш код):
else
{
$this->getparent($referrer);
}
Вы никогда не возвращаете значение из рекурсивного вызова, оно должно быть:
else
{
return $this->getparent($referrer);
}
То, что я подозреваю, является актуальной проблемой. Но я должен усомниться в том, что этот рекурсивный подход лучше, чем итеративный.