Problem w klasie z mysql_fetch_array

0

Witam,
mam taki problem. W klasie w konstruktorze mam łączenie z bazą i pobieranie danych (tylko wynik) do $this->dbResult. Nie pytajcie się jak dokładnie jest to zrobione (opisałem ogólnie) bo wszystko ładnie działa, natomiast problem mam taki:

Zrobiłem dwie funkcje: getAll() - pobiera wszystkie pola do tablicy (i wiersze) i getOne($name) - pobiera tylko pole podane w argumencie (i wszystkie wiersze) $name. W obu funkcjach mam taki kod:

	$j=0;
	while($result = mysql_fetch_array($this->dbResult))  // chodzi o tą linijkę
	{
          /* w funkcji getAll() mam jeszcze pobieranie wszystkich pól */
	  $show[$j] = $result[$name];
	  $j++;
	}

Jeżeli w klasie dziedziczącej wykonam najpierw pobieranie wartości przy pomocy $this->getOne($name), a potem $this->getAll() to wywala błąd (podałeś zły argument do foreach() <-- tak przetwarzam wartości).

Jak sprawdzam to sa różne Resourse id (#24 i #25) - co może powodować takie działanie ? Czy tylko raz można wykonać mysql_fetch_array() dla jednego wyniku bazy (dbResult) ?

0

w manualu jest napisane:

Returns an array of strings that corresponds to the fetched row, or FALSE if there are no more rows.

wynika z tego, że jak "przelecisz" wszystkie rekordy, to potem funkcja zwaca już tylko FALSE, a nie rozpoczyna zwracania wyników od nowa.

0

Jeszcze jedno. Zmieniłem tak że w konstruktorze robię:

(najpierw definiuję: private $result = array() )
$this->result = mysql_fetch_array($this->dbResult);

Potem zamiast:

while($result = mysql_fetch_array($this->dbResult)) { ... }

daję:

	while($this->result)
	{
	  for($i=$from;$i<$this->countFields;$i++)
	  {
	    $name = mysql_field_name($this->dbResult, $i);
	    if(($this->countRows == 1) AND ($delCount)){
	      $show[$name] = $this->result[$name];         // ta linijka
	    } else {
	      $show[$j][$name] = $this->result[$name];
	    }
	  }
	  $j++;
	}

Z bazy pobieram jeden rekord z 10 polami (większość Boolean). Mimo to otrzymuję błąd:

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 16 bytes)

2

a może by tak zamiast:

$this->result = mysql_fetch_array($this->dbResult);

dać:

$i = 0;
while($result[$i++] = mysql_fetch_array($this->dbResult)); 
0

Dzisiaj rano obudziłem się z pomysłem na to co jest (sprawdziłem teorię i mam rację).

Ja stosuje while($this->result), czyli wykonuję pętlę nieskończoną. Jeżeli jest while($result = mysql_fetch_array($this->dbResult)), to przy każdym wykonaniu pętli zmienia wartość na kolejną.

Dzięki wielkie za pomoc, tak na początku myślałem że nie można 2 razy wywołać mysql_fetch_array() na jednym wyniku z bazy.

Daję ci strzałkę w górę xD

0

Chodzi mi o pomógł, ale nie jestem zarejestrowany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1