2012-03-18 2 views
3

좋아, 내가 수행 할 때 실현 : 테이블에서 열 이름이있는 데이터의 키가 어디는 대신 foreach 루프를 사용 myslqli_fetch_array()와 잠시

//connection code; 

//query code; 

//$result= mysqli_query(); 

$row= mysqli_fetch_array($result); 

당신이 연관 배열을 만들 각각의 행.

그럼 당신은 사용할 수 있습니다

while ($row= mysqli_fetch_array($result)) 
{ 
//code to echo out table data. 
} 

내 질문은 어떻게 while 루프는 각 반복 후 다음 행으로 이동 않습니다입니까? 나는 그것이 foreach 루프가 무엇을위한 것이라고 생각 했는가?

+1

['PDOStatement'] (http://php.net/PDOStatement)는 [Traversable] (http://php.net/Traversable) 인터페이스를 지원하므로'foreach'에서 사용할 수 있습니다. mysqli 결과와 달리 직접 루프. – outis

+2

현재 PHP5.4에서 mysqli_query는 [Traversable] (http://www.php.net/manual/en/class.mysqli-result.php)을 리턴한다. (http : // www .php.net/manual/en/class.traversable.php)'foreach'도 사용 가능합니다. –

답변

0

이 부분은 더 가져올 수 없기 때문에 그 행을 페치하지 때까지 한 번에 하나 개의 행을 인출하게 while 루프에 넣는 동시에

$row = mysqli_fetch_array($result); 

에 하나 개의 행을 가져온다.

대안이 들어

$rows = mysql_fetch_all($result); 
foreach($rows as $row){ 
    // do something with row 
} 

이 작동 할 수있는 foreach는 그들을 통해 모든 행, 다음 루프를 가져올 것입니다, 당신은 자신을 물론 루프 동안 원래이있는 mysql_fetch_all 기능을 확인해야 그것에 ...

function mysql_fetch_all($result) 
{ 
    $all = array(); 
    while($thing = mysql_fetch_assoc($result)) { 
    $all[] = $thing; 
    } 
    return $all; 
} 
0

이는 결과 내에서 쿼리의 현재 상태 (즉, 반환 할 다음 결과 행)를 저장하기 때문에 작동합니다. ,

while ($line = fgets($fp, 1000)) { 
    // ... 
} 
장면 뒤에

(와 언어, 인터프리터, 컴파일러에 따라 : 당신이 유사한 예를 원하는 경우

, 그것은 파일에서 읽는처럼 작동, 당신은 유사한 구조를 사용할 수있어 어디 등) forwhile은 본질적으로 동일한 코드를 생성합니다. 차이점은 코드에서 수행해야하는 작업에 따라 다른 접근 방식보다 한 가지 접근 방식이 더 읽기 쉽다는 것입니다.

다음 두 루프를 예로 들어 보겠습니다. 둘 다 똑같습니다. 결과 집합을 반환

for ($i = 0; $i < 10; $i++) { 
    // ... 
} 

$i = 0; 
while ($i < 10) { 
    // ... 
    $i++; 
} 
+1

PHP를 사용하는 사람은 아니지만 MySQL 클라이언트 라이브러리입니다. – glglgl

+0

통과 했습니까? 좋아, MySQL (또는 어떤 라이브러리가 사용 되든)이 그때까지 수행되었다고 생각합니다. 그러나 다시, 일반적인 호출을 사용합니다. 요점을 알았어. – Mario

1

많은 기능은 당신이 사용된다에 foreach()을 할 수있는 배열을 반환하여 그렇게. 그러나 항상 그런 것은 아니며, 특히 데이터베이스 기능과 관련이 있습니다. mysqli_fetch_array은 단 하나의 행을 가져 오거나 더 이상 남아 있지 않으면 부울 false을 반환합니다. 루프가 작동하는 방식입니다. 처리 할 행이있는 한 표현식은 true으로 계산됩니다.

이 구성의 이유는 주로 효율성입니다. 데이터베이스 행을 가져 오는 것은 성능상 중요한 작업이 될 수 있으며 모든 행이 필요하지 않은 경우가 있습니다. 이러한 상황에서 이러한 접근 방식은 더 많은 유연성을 제공 할 것입니다.모든 결과 데이터를 한 번에 메모리에로드해야하는 것은 아니므로 행을 하나씩 가져 오는 것이 더 친숙합니다.

실제로 Mysqli에는 배열의 전체 결과 집합 인 mysqli_fetch_all을 가져 오는 기능이 있습니다. 그 이상으로 foreach() 수 있습니다.

0

while 루프가 실행될 때마다 함수 mysql_fetch_array를 실행하고 다음 결과를 얻습니다. 그것은 더 많은 결과가 나타날 때까지 그렇게합니다.

0

mysql_fetch_array는 가져온 행에 해당하는 문자열 배열을 반환하고 더 이상 행이 없으면 FALSE를 반환합니다. 행이 있으면 데이터를 가져옵니다.

답변 해 주셨으면합니다. 당신이 의미하는 바를 이해하기가 어렵습니다.

1

mysql_fetch_array는 mysql 쿼리에서 결과 집합의 다음 행을 가져 와서 그 행을 배열로 반환하거나 가져올 행이 더 이상 없다면 false를 반환합니다.

while 루프는 결과 집합에서 한 번에 하나씩 결과를 계속 추출하고 mysql_fetch_array가 false가 될 때까지 계속됩니다.

foreach 루프는 배열의 각 값을 반복합니다. mysql_fetch_array는 하나의 결과 만 가져 오므로 count ($ row) 값은 매번 1이됩니다.

관련 문제