Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: procedura na obiekt i problem
Forum PHP.pl > Forum > PHP
attimo
Witam,

Proceduralnie zapisywanie wyników z bazy do tablicy wygląda tak:
  1. while ($x = mysqli_fetch_assoc($y))

próbowałem uzyskać taki sam efekt w obiektowym i niestety zapisuje się tylko pierwszy rekord. Wygląda to tak:
  1. while($this->x = $this->y->fetch_assoc())


Przejrzałem manual i tam jest tak samo. Z góry uprzedzam, że wyników jest więcej niż 1 smile.gif
darko
zobacz, co zwraca
  1. print_r($this->y->fetch_assoc());
attimo
Zwraca jeden rekord. Dziwne bo gdy daje:
  1. print_r($this->y);
ewidentnie wyswietla mi [num_rows] => 2
darko
To pokaż kod metody fetch_assoc()
attimo
  1. $this->y = $this->polaczenie->query("SELECT * FROM handel WHERE czas > NOW() - INTERVAL 168 HOUR");

tym zapytaniem pobieram wszystko co jest w danej tabeli zgodne z warunkiem. czyli dokladnie 2 rekordy i potem chciałem uży pętli do wyswietlenia obu ale wyswietla tylko jeden co juz wiemy.

W manualu jest tak:
  1. $query = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 50,5";
  2. $result = $mysqli->query($query)
  3. while ($row = $result->fetch_assoc())


czyli tak samo...
darko
Dla pewności wklej samą treść zapytania do phpmyadmina i wykonaj zobacz, co zwróci, być może podany interwał nie obejmuje zakresu drugiego rekordu w bazie, chociaż num_rows == 2. Daj też więcej kodu.
attimo
wszystko wydaje sie byc poprawne to caly kod metody
  1. $this->wynik = $this->polaczenie->query("SELECT * FROM handel WHERE czas > NOW() - INTERVAL 168 HOUR");
  2. $this->dane['ileWynikow'] = $this->wynik->num_rows;
  3.  
  4. if($this->dane['ileWynikow'] == 0) {
  5. echo 'Aktualnie brak przedmiotow na sprzedaz';
  6. exit();
  7. }
  8.  
  9. while($this->wyniki = $this->wynik->fetch_assoc()) {... dalsza czesc nie istotna bo i tak wykonuje sie tylko raz

sprawdzalem samo zapytanie i dziala poprawnie.
ADeM
  1. while($this->wyniki[] = $this->wynik->fetch_assoc()) {

?
attimo
Spróbowałem tak:


  1. if( $this->wynik = $this->polaczenie->query("SELECT * FROM handel WHERE czas > NOW() - INTERVAL 168 HOUR")) {
  2.  
  3. $this->dane['ileWynikow'] = $this->wynik->num_rows;
  4.  
  5.  
  6.  
  7. if($this->dane['ileWynikow'] == 0) {
  8.  
  9. echo 'Aktualnie brak przedmiotow na sprzedaz';
  10.  
  11. exit();
  12.  
  13. }
  14.  
  15.  
  16.  
  17. while($this->wyniki = $this->wynik->fetch_assoc()) {... dalsza czesc nie istotna bo i tak wykonuje sie tylko raz

czyli dalem to w warunku i niestety jest tak samo. nie mam juz sil na to
ADeM
A sprawdziłeś z taką zmianą:
  1. while($this->wyniki[] = $this->wynik->fetch_assoc())
attimo
jak to zastosuje to robi się takie coś: przy pierwszym wykonaniu while: tablica->0 element i w nim dane kolumny po drugim tworzy sie kolejna tablica i jest: tablica-> 0 element a druga zawiera dwa rekordy i analogicznie jest robione dalej. nie chce aby za kazdym wkonaniem tworzyly mi sie tablice tylko chce jedna tablice a elementy to maja byc rekordy. ale dzieki za pomysl

array (
0 =>
array (
x,
x
x
x,
x
x
),
)

array (
0 =>
array (
x,
x
x
x,
x
x
),
1 =>
array (
x,
x
x
x,
x
x
),
)

array (
0 =>
array (
x,
x
x
x,
x
x
),
1 =>
array (
x,
x
x
x,
x
x
),
2 =>
array (
x,
x
x
x,
x
x
),
) itd.
ADeM
  1. $i = 0;
  2. while($data = $this->wynik->fetch_assoc()) {
  3. $this->wyniki[ $i ][ 'x' ] = $data[ 'x' ];
  4. $this->wynik[ $i ][ 'y' ] = $data[ 'y' ];
  5. $i++;
  6. }

Coś takiego?
attimo
To daje ten sam efekt. w strukturze while ($row = mysqli_fetch_assoc($result)) to tworzy tablice o liczbie elementow odpowiadajacej ilosci rekordow chce tutaj uzyskac to samo niestety nie udaje mi sie. wydawalo by sie ze powinno to dzialac tak samo...
ADeM
Nie bardzo rozumiem. Możesz podać jakiąś przykładową tablicę, która ma być wynikiem?
Coś takiego:
  1. $i = 0;
  2. while($data = $this->wynik->fetch_assoc()) {
  3. $this->wyniki[ $i ] = $data[ 'x' ];
  4. $i++;
  5. }
attimo
Mój błąd to:
while($this->wyniki[] = $this->wynik->fetch_assoc())
dziala poprawnie tylko źle to wykorzystalem przepraszam. jest tylko jeden maly detal nie pobiera ostatniego rekordu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.