Problem w klasie z mysql_fetch_array

Odpowiedz Nowy wątek
2011-08-05 22:34
Zi00mal
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) ?

Pozostało 580 znaków

2011-08-05 23:10
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.


Pozostało 580 znaków

2011-08-06 00:05
Zi00mal
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)

Pozostało 580 znaków

2011-08-06 09:13
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)); 

Pozostało 580 znaków

2011-08-06 10:46
Zi00mal
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

jaką strzałkę?:D - Loganek 2011-08-06 10:48

Pozostało 580 znaków

2011-08-09 20:39
Zi00mal
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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