2016-09-01 14 views
6

Tôi đang cố gắng hiểu tại sao hàm fetch_assoc hoạt động theo cách đó. Tôi có đoạn mã sau đây:Hiểu 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 
} 

Truy vấn trả về 3 hàng từ một bảng. Tại sao print_r đầu tiên chỉ trả lại hàng đầu tiên của dữ liệu được truy vấn nhưng print_r thứ 2 trả về tất cả 3? Làm thế nào để đưa fetch_assoc vào một vòng lặp while cho nó thực hiện hành động nhiều hơn một lần? Tôi đọc rằng fetch_assoc trả về hoặc là một mảng kết hợp hoặc NULL nhưng tôi đang đấu tranh để hiểu làm thế nào trong khi vòng lặp "nói" fetch_assoc để lấy hàng tiếp theo, nếu điều đó có ý nghĩa?

Cảm ơn bạn.

+5

Tại sao việc đặt thứ gì đó vào vòng lặp khiến một điều gì đó xảy ra nhiều lần? – Phylogenesis

+1

Ý nghĩa của câu lệnh trong khi rất đơn giản. Nó báo cho PHP thi hành câu lệnh lồng nhau liên tục, miễn là biểu thức while đánh giá thành TRUE. Giá trị của biểu thức được kiểm tra mỗi lần ở đầu vòng lặp, vì vậy ngay cả khi giá trị này thay đổi trong khi thực hiện câu lệnh lồng nhau, thực thi sẽ không dừng cho đến khi kết thúc phép lặp (mỗi lần PHP chạy các câu lệnh trong vòng lặp là một lần lặp). Đôi khi, nếu biểu thức trong khi đánh giá thành FALSE ngay từ đầu, các câu lệnh lồng nhau sẽ không được chạy một lần. – Daan

+0

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

Trả lời

10

Hãy cố gắng tìm hiểu mã của bạn và làm thế nào nó hoạt động:

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

Một biến $results có một bộ sưu tập hàng được trả về bởi một truy vấn. Kích thước của bộ sưu tập có thể từ 0 đến n.

$resultsArray = $results->fetch_assoc(); 

Dòng này tìm nạp phần tử đầu tiên từ bộ sưu tập. Nếu bộ sưu tập trống, bộ sưu tập sẽ trả về NULL.

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

Nó có thể được tách riêng trong các bước sau:

  1. Tính $row = $results->fetch_assoc() và trở mảng với các yếu tố hoặc NULL.
  2. Thay thế $row = $results->fetch_assoc() trong while với giá trị nhận được và nhận các câu sau: while(array(with elements)) hoặc while(NULL).
  3. Nếu đó là while(array(with elements)), nó sẽ giải quyết tình trạng trong khi ở True và cho phép thực hiện lặp lại.
  4. Nếu đó là while(NULL), nó sẽ giải quyết tình trạng trong khi ở False và thoát khỏi vòng lặp.