Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zwracanie wynikow z bazy danych dziwna sytuacja
Forum PHP.pl > Forum > Przedszkole
major697
czesc pisze sobie taki maly skrypcik ktpory bd zwracal wyniki z bazy danych. mam takie małe pytanie dlaczego kiedy mam taka pętlę:

  1. while ($wyniki) {
  2. echo "<pre>";
  3. print_r($wyniki);
  4. echo "</pre>";
  5. }


to rzegladarka wyswietla mi tylko pierwszy rekord z bazy danych i to w dodatku an okraglo (musze zatrzymywac wczytywanie strony!) a gdy zmienie na:

  1. while ($wyniki = mysqli_fetch_array($rezultat)) {
  2. echo "<pre>";
  3. print_r($wyniki);
  4. echo "</pre>";
  5. }


to wszystko jest ok

Cały kod (działający):

  1. <?php
  2.  
  3. $nazwa_servera = 'localhost';
  4. $login = 'root';
  5. $pass = 'tajemnica';
  6. $bd = 'kurs_php';
  7.  
  8. $lacze = mysqli_connect($nazwa_servera, $login, $pass);
  9. $lacze_db = mysqli_select_db($lacze, $bd);
  10.  
  11. //var_export($lacze_db);
  12.  
  13. $zap = 'SELECT * FROM sprzedaz';
  14. $rezultat = mysqli_query($lacze, $zap);
  15. $wyniki = mysqli_fetch_array($rezultat);
  16.  
  17. while ($wyniki = mysqli_fetch_array($rezultat)) {
  18. echo "<pre>";
  19. print_r($wyniki);
  20. echo "</pre>";
  21. }
  22. ?>


oraz NIE działający:

  1. <?php
  2.  
  3. $nazwa_servera = 'localhost';
  4. $login = 'root';
  5. $pass = 'tajemnica';
  6. $bd = 'kurs_php';
  7.  
  8. $lacze = mysqli_connect($nazwa_servera, $login, $pass);
  9. $lacze_db = mysqli_select_db($lacze, $bd);
  10.  
  11. //var_export($lacze_db);
  12.  
  13. $zap = 'SELECT * FROM sprzedaz';
  14. $rezultat = mysqli_query($lacze, $zap);
  15. $wyniki = mysqli_fetch_array($rezultat);
  16. $wyniki = mysqli_fetch_array($rezultat);
  17.  
  18. while ($wyniki) {
  19. echo "<pre>";
  20. print_r($wyniki);
  21. echo "</pre>";
  22. }
  23. ?>
kapslokk
Manual mówi: mysqli_result::fetch_array -- mysqli_fetch_array — Fetch a result row as an associative, a numeric array, or both
Funkcja zwraca jeden wiersz, a w obiekcie $rezultat przestawia wskaźnik na następny wiersz, tak aby przy kolejnym wywołaniu mysqli_fetch_array zwrócić kolejny.
major697
Chodzi mi o samą pętlę while w niedziałającym kodzie w linii 16 jest zmienna $wyniki, następnie w pętli while w nawiasie podałem odwołanie do tej zmiennej i tu moje pytanie dlaczego nie działa ono prawidłowo tylko musiałem wpisać całe zapytanie tak jak w działającym kodzie w linii 17:

  1. while ($wyniki = mysqli_fetch_array($rezultat)) {
Popek231
Jakbyś zastosował taki skrypcik:
  1. $i=0;
  2. while($wyniki = mysqli_fetch_array($rezultat)){
  3. echo 'Wiersz: '.$i.'<br>';
  4. while($row = $wyniki){
  5. echo 'Wartość: '.$row.'<br>';
  6. }
  7. echo '<hr>';
  8. $i++;
  9. }


wiesz co zawiera $row?
i dlaczego $row = $wyniki?

każdy wiersz byłby 'wzięty' do pętli, a potem w kolejnej pętli wyświetlamy wartości z danego wiersza.


$wyniki = mysqli_fetch_array($rezultat)
przedstawia wynik odpowiedzi z bazy danych MySQLi w zmiennej $rezultat w postaci tablicy, z której można wyczytać kolejne wartości,
$wyniki w pętli while zawiera aktualny indeks,
np. jeśli mysqli_fetch_array($rezultat) ma 5 wartości (0-4)
można odwoływać się:
$wyniki = mysqli_fetch_array($rezultat);
WYPISZ $wyniki[0];
WYPISZ $wyniki[1];
WYPISZ $wyniki[2];
WYPISZ $wyniki[3];
WYPISZ $wyniki[4];
ale pętla robi przełożenie na kolejny indeks za nas i my tylko operujemy na zmiennej $wyniki.
w wypadku MySQLi (MySQL też) $wyniki jest tablicą asocjacyjną, zawiera indeksy numeryczne od 0 oraz znakowe (nie wiem jak się to mówi profesjonalnie),
czyli można w Twoim kodzie się odwołać przez:
while ($wyniki = mysqli_fetch_array($rezultat)) {
echo "ID to: ".$wyniki['id'];
echo "ID to: ".$wyniki[0];
}
o ile pobrałeś z bazy komórkę o nazwie ID, która jest na pozycji 0.

jeśli coś nie jasno napisałem, odezwij się, wyjaśnię wink.gif


ps.
a sam $rezulat nie zawiera takiej tablicy, przez co nie można tego użyć w pętli ( while($rezultat){} ).
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.