Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> procedura na obiekt i problem
attimo
post 22.07.2010, 12:53:54
Post #1





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował attimo 22.07.2010, 12:54:19
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
darko
post 22.07.2010, 12:55:41
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


zobacz, co zwraca
  1. print_r($this->y->fetch_assoc());


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
attimo
post 22.07.2010, 12:58:11
Post #3





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


Zwraca jeden rekord. Dziwne bo gdy daje:
  1. print_r($this->y);
ewidentnie wyswietla mi [num_rows] => 2
Go to the top of the page
+Quote Post
darko
post 22.07.2010, 13:02:35
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


To pokaż kod metody fetch_assoc()


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
attimo
post 22.07.2010, 13:12:51
Post #5





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


  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...

Ten post edytował attimo 22.07.2010, 13:13:41
Go to the top of the page
+Quote Post
darko
post 22.07.2010, 13:25:07
Post #6





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
attimo
post 22.07.2010, 13:32:05
Post #7





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
ADeM
post 22.07.2010, 13:58:31
Post #8





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

Ostrzeżenie: (0%)
-----


  1. while($this->wyniki[] = $this->wynik->fetch_assoc()) {

?


--------------------
Go to the top of the page
+Quote Post
attimo
post 22.07.2010, 14:14:55
Post #9





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
ADeM
post 22.07.2010, 14:17:57
Post #10





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

Ostrzeżenie: (0%)
-----


A sprawdziłeś z taką zmianą:
  1. while($this->wyniki[] = $this->wynik->fetch_assoc())


Ten post edytował ADeM 22.07.2010, 14:18:12


--------------------
Go to the top of the page
+Quote Post
attimo
post 22.07.2010, 14:35:56
Post #11





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował attimo 22.07.2010, 14:37:39
Go to the top of the page
+Quote Post
ADeM
post 22.07.2010, 14:43:31
Post #12





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

Ostrzeżenie: (0%)
-----


  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?

Ten post edytował ADeM 22.07.2010, 14:43:47


--------------------
Go to the top of the page
+Quote Post
attimo
post 22.07.2010, 14:50:46
Post #13





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
ADeM
post 22.07.2010, 14:54:11
Post #14





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

Ostrzeżenie: (0%)
-----


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. }


--------------------
Go to the top of the page
+Quote Post
attimo
post 22.07.2010, 15:13:16
Post #15





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:12