2013-01-20 4 views
2

while 루프에서 결과를 표시 할 때 코드의 스 니펫이 어떻게 다른지 혼란 스럽습니다. 첫 번째 코드 조각은 완벽하게 작동하지만 두 번째 코드는 결과를 표시하지만 무한 루프에서 결과를 반복합니다. 누군가 나에게 설명 할 수 있을까? 내가 변수로 $ stmt-> 가져 오기()를 넣으면PHP 변수가 무한 루프에서 데이터를 표시하는 동안 루프가 발생합니다.

$stmt = $db_conn->prepare($sql); 

$stmt->execute(array("Lorna", 3)); 

while($result = $stmt->fetch()){ 
    echo $result["name"] . "<br />" . $result["description"] . "<br />";   
} 

데이터 $라고하고, 내가 무한 루프를 얻을이 대신 while 루프에서 $ stmt-> 가져 오기()를 넣어의 통과하려고합니다.

$stmt = $db_conn->prepare($sql); 

$stmt->execute(array("Lorna", 3)); 

$data = $stmt->fetch(); 

while($result = $data){ 
    echo $result["name"] . "<br />" . $result["description"] . "<br />";   
} 

미리 감사드립니다.

답변

2

fetch()에 대한 호출로 행을 앞당기는 경우.

경우 첫번째 코드에서 1

while($result = $stmt->fetch()){ 
    //every iteration executes fetch 
    //advances it by one row 
    //turns to false when no more rows 
} 

케이스 (2)

$data = $stmt->fetch(); 
//now at first row 
while($result = $data){ 
    //always at first row 
    //always evaluates to true (no calls to fetch) 
} 
2

는마다 while이 새로운 행에 질의 결과 포인터 이동 불린다. 결국 포인터는 결과 집합의 끝에 도달하고 $stmt->fetch()은 false를 반환하고 루프를 종료합니다.

두 번째 루프에서는 한 번만 루프 이전에 다음 행만 반복합니다. 그런 다음 루프는 동일한 루프를 반복하여 반복하므로 아무 것도 변경되지 않으므로 루프 조건은 결코 false를 반환하지 않습니다.

1

첫 번째 루프는 null이 될 수있는 함수에서 반환 된 값을 확인하여 루프를 종료합니다.

두 번째 루프는 그냥 지정합니다.

관련 문제