2012-12-23 4 views
0

내가 MySQLi 실험과 내가 여기 fetch_array(MYSQLI_ASSOC);두 개의 While 루프에서 두 번째 빈 배열 반환?

서식 내 배열/사용에 접근하는 방법에 대한 차이를 확인하려면 다음 코드를 사용하고 내 코드입니다 :

include "Database.php"; 

$ArrayQuery = $mysqli->query("SELECT * FROM accountinformation"); 


while ($ArrayResults = $ArrayQuery->fetch_array(MYSQLI_ASSOC)) 
{ 
    echo count($ArrayResults); 
    echo "<br>"; 
} 
echo "<br><br><bR><br>"; 
    $Empty = array(); 
while ($ArrayResult = $ArrayQuery->fetch_array(MYSQLI_ASSOC)) 
{ 
    foreach ($ArrayResult AS $ArrayRes) 
    { 
     $Empty[] = $ArrayRes; 
    } 
} 

print_r($Empty); 

문제는, 그 전 내 while 루프에 동일한 Variable을 사용하면 첫 번째 것은 3을 반환하고 3을 반환합니다.

그러나 두 번째 쿼리에서 문제가 발생합니다. 그것은 빈 배열을

array()print_r();

를 반환하고 내가 할 때

while ($ArrayResult = $ArrayQuery->fetch_array(MYSQLI_ASSOC)) 
{ 
    print_r($ArrayResult); 
} 

을 내 두 번째 while 루프의 경우, 출력 아무 것도 반환하지 않습니다.

$ArrayResults$ArrayResult은 중복되지 않았으며 실제로는 고유합니다.

왜 두 번째 while 루프가 처음 작동 할 때 아무것도 반환하지 않습니까? 나는 다른 시작 변수로 혼합물로 두 번째 쿼리를 생성 할 때

는 업데이트

:

$ArrayQuer = $mysqli->query("SELECT * FROM accountinformation"); 

내 두 번째를 수정 while 루프 :

while ($ArrayResult = $ArrayQuer->fetch_array(MYSQLI_ASSOC)) 
{ 
    print_r($ArrayResult); 
} 

내가 얻을 예상되는 출력? 그렇다면 MySQLi가 스크립트 전체에서 동일한 매개 변수를 두 번 사용하지 못하게 할 수 있습니까?

+0

왜 당신은 이미 모든 결과를 가져 오는 완료 후 아무것도 가져 기대 귀하의 경우에 완벽하게 적합? ['$ ArrayQuery-> data_seek (0)'] (http : //us.php.)를 사용하여 첫 번째 행으로 되감습니다.net/manual/en/mysqli-result.data-seek.php # 85629), 이미 가져온 결과 배열을 사용하면됩니다. – DCoder

+0

@DCoder '$ ArrayQuery'내에서 다른 while 루프에서 사용할 데이터를로드하지 않으시겠습니까? 나는 이런 상황을 사용하는 것이 최선의 관행이 아니라는 것을 이해합니다. 하지만 나는 MySQLI 내의 꼬임을 찾아서 어떤 것이 작동 하는지를보고 있습니다. 무슨 일로. 왜냐하면 내가 mysql_ * 함수로 넘어 간다면; 그것은 두 개의 다른 while 루프에서'$ ArrayQuery'를 두 번 사용하여 예상되는 결과물을 생성합니다. –

+0

첫 번째 코드 샘플의 활동을 살펴보십시오. 1) 쿼리 실행 2) 모든 결과 가져 오기 3) 모든 결과를 다시 가져옵니다. 3 단계 전에 다른 단계 "다른 쿼리 실행"을 삽입하면 원하는 결과를 얻을 수 있습니다. 이는 mysql_ * 함수가 상황을 처리하는 방식과 완전히 동일합니다. – DCoder

답변

1

mysqli_data_seek

while ($ArrayResults = $ArrayQuery->fetch_array(MYSQLI_ASSOC)) 
    { 
     echo count($ArrayResults); 
     echo "<br>"; 
    } 
    echo "<br><br><bR><br>"; 
    mysqli_data_seek($ArrayQuery,0); // Addition Made Here 
     $Empty = array(); 
    while ($ArrayResult = $ArrayQuery->fetch_array(MYSQLI_ASSOC)) 
    { 
     foreach ($ArrayResult AS $ArrayRes) 
     { 
      $Empty[] = $ArrayRes; 
     } 
    } 
    print_r($Empty); 

가 이미 인출 된 배열을 다시 사용하려면 결과에서 임의의 행 결과 포인터를 조절; mysqli_data_seek();을 사용해야합니다 (). $ 빈 변수 위에 추가했습니다.) 이것은 문제가되어야합니다.

여기에 설명서를 참조하십시오 :이 시나리오의

http://us.php.net/manual/en/mysqli-result.data-seek.php

생각해을; 왜 당신은 이미 소유하고있는 것을 다시 사 겠는가?

+1

완벽하게 작동합니다. –

관련 문제