2016-09-01 14 views
6

Próbuję zrozumieć, jak/dlaczego fetch_assoc działa tak, jak robi. że ma następujący fragment kodu:Zrozumieć fetch_assoc()

$results = $connectToDb->fetch("SELECT * FROM customer"); 
$resultsArray = $results->fetch_assoc(); 
print_r($resultsArray); //print_r 1 

while($row = $results->fetch_assoc()){ 
    print_r($row);  //print_r 2 
} 

Zapytanie zwraca 3 wiersze z tabeli. Dlaczego 1. print_r zwraca tylko pierwszy wiersz zapytanych danych, ale drugi print_r zwraca wszystkie 3? W jaki sposób wprowadzenie fetch_assoc do pętli while nakazuje wykonanie tej akcji więcej niż raz? Czytałem, że fetch_assoc zwraca tablicę asocjacyjną lub NULL, ale staram się zrozumieć, w jaki sposób pętla while "mówi" fetch_assoc, aby pobrać kolejny wiersz, jeśli to ma sens?

Dziękuję.

+5

Dlaczego wprowadzenie czegoś w pętlę powoduje, że coś się dzieje więcej niż raz? – Phylogenesis

+1

Znaczenie instrukcji while jest proste. Informuje PHP, aby wielokrotnie wykonywał zagnieżdżone instrukcje, o ile wyrażenie while ma wartość TRUE. Wartość wyrażenia jest sprawdzana za każdym razem na początku pętli, więc nawet jeśli ta wartość zmieni się podczas wykonywania zagnieżdżonych instrukcji, wykonanie nie zostanie zatrzymane do końca iteracji (za każdym razem, gdy PHP uruchamia instrukcje w pętli jest jedna iteracja). Czasami, jeśli wyrażenie while zwraca wartość FALSE od samego początku, zagnieżdżone instrukcje nie będą nawet uruchamiane jeden raz. – Daan

+0

http://php.net/manual/en/control-structures.while.php – RiggsFolly

Odpowiedz

10

Spróbujmy zrozumieć swój kod i jak to działa:

$results = $connectToDb->fetch("SELECT * FROM customer"); 

Zmienna $results posiada zbiór wierszy, które są zwracane przez kwerendy. Rozmiar kolekcji może wynosić od 0 do n.

$resultsArray = $results->fetch_assoc(); 

Ta linia pobiera pierwszy element z kolekcji. Jeśli kolekcja jest pusta, zwróci NULL.

while($row = $results->fetch_assoc()){ 
} 

mogą być oddzielone w następujących etapach:

  1. Oblicz $row = $results->fetch_assoc() i powrót tablicę elementów lub NULL.
  2. Zastąpić $row = $results->fetch_assoc() w while z uzyskaną wartością i uzyskać następujące oświadczenia: while(array(with elements)) lub while(NULL).
  3. Jeśli jest to while(array(with elements)), rozwiązuje warunek dotyczący czasu w True i umożliwia wykonanie iteracji.
  4. Jeśli jest to while(NULL), rozpatruje warunek dotyczący czasu w False i kończy pętlę.