attimo
22.07.2010, 12:53:54
Witam,
Proceduralnie zapisywanie wyników z bazy do tablicy wygląda tak:
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:
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
darko
22.07.2010, 12:55:41
attimo
22.07.2010, 12:58:11
Zwraca jeden rekord. Dziwne bo gdy daje:
ewidentnie wyswietla mi [num_rows] => 2
darko
22.07.2010, 13:02:35
To pokaż kod metody fetch_assoc()
attimo
22.07.2010, 13:12:51
$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:
$query = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 50,5";
$result = $mysqli->query($query)
while ($row = $result->fetch_assoc())
czyli tak samo...
darko
22.07.2010, 13:25:07
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
22.07.2010, 13:32:05
wszystko wydaje sie byc poprawne to caly kod metody
$this->wynik = $this->polaczenie->query("SELECT * FROM handel WHERE czas > NOW() - INTERVAL 168 HOUR");
$this->dane['ileWynikow'] = $this->wynik->num_rows;
if($this->dane['ileWynikow'] == 0) {
echo 'Aktualnie brak przedmiotow na sprzedaz'; }
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
22.07.2010, 13:58:31
while($this->wyniki[] = $this->wynik->fetch_assoc()) {
?
attimo
22.07.2010, 14:14:55
Spróbowałem tak:
if( $this->wynik = $this->polaczenie->query("SELECT * FROM handel WHERE czas > NOW() - INTERVAL 168 HOUR")) {
$this->dane['ileWynikow'] = $this->wynik->num_rows;
if($this->dane['ileWynikow'] == 0) {
echo 'Aktualnie brak przedmiotow na sprzedaz';
}
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
22.07.2010, 14:17:57
A sprawdziłeś z taką zmianą:
while($this->wyniki[] = $this->wynik->fetch_assoc())
attimo
22.07.2010, 14:35:56
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
22.07.2010, 14:43:31
$i = 0;
while($data = $this->wynik->fetch_assoc()) {
$this->wyniki[ $i ][ 'x' ] = $data[ 'x' ];
$this->wynik[ $i ][ 'y' ] = $data[ 'y' ];
$i++;
}
Coś takiego?
attimo
22.07.2010, 14:50:46
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
22.07.2010, 14:54:11
Nie bardzo rozumiem. Możesz podać jakiąś przykładową tablicę, która ma być wynikiem?
Coś takiego:
$i = 0;
while($data = $this->wynik->fetch_assoc()) {
$this->wyniki[ $i ] = $data[ 'x' ];
$i++;
}
attimo
22.07.2010, 15:13:16
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.