코딩을 하다보면
$query = "SELECT * FROM table_name " ; $result = mysqli_query($dbc, $query) or die('Invalid Query'); while($row = mysqli_fetch_assoc($result)) { echo '.$row['idx'].'
'; }
이렇게 쿼리 결과($result)를 while 등의 반복문으로 한 번 사용한 다음에 다른 곳( 다른 함수나 다른 html 영역에 노출 ) 에 다시 사용해야 하는 경우가 종종있다.
그냥 while($row = mysqli_fetch_assoc($result)) 를 돌려봐야 아무것도 나오지 않는다.
한번 mysqli_fetch_assoc($result) 함수를 통해서 row 를 모두 뽑아내고 $result 는 비어 버린건가?
라는 생각이 들어 mysqli_num_rows($result) 를 찍어보면 처음에 mysqli_query($dbc, $query)로 나온 row 의 숫자가 잘 나온다
빈 건 아니란 소리지
그럼 뭐가 문제여 하고 검색하다보니 $result의 인덱스를 초기화하라고 한다. 아 그르치 얘도 결국 배열 비스무리한거지..
bool mysqli_data_seek( mysqli_result $result, int $offset ) // 구문 형식 if(mysqli_data_seek($result, 0)) { while($row = mysqli_fetch_assoc($result)) { echo ''.$row['idx'].'
; } }
mysqli_data_seek 라는 함수가 있다. 자원( $result ) 얘의 인덱스를 원하는 곳으로 설정해준다.
자의 경우 처음부터 다시 값을 얻길 원함으로 $offset 를 0 으로 설정하고 나니 다시금 반복문을 돌릴때 잘~나온다
참조 : http://php.net/manual/zh/mysqli-result.data-seek.php
응용하자면
$qry = "SELECT * FROM table_name ORDER BY `idx` DESC"; $result = mysqli_query($dbc, $qry) or die('Invalid Query'); while( $row = mysqli_fetch_assoc($result)) { echo ''.$row['idx'].'
'; } /* 출력 5 4 3 2 1 */ /* 쿼리 결과를 다시 반대로 정렬하고 싶은 경우 */ for($i = mysqli_num_rows($result); $i > 0 ; --$i) { if(mysqli_data_seek($result, $i) { $row = mysqli_fetch_assoc($result); echo ''.$row['idx'].'
'; } } /* 결과 1 2 3 4 5 */
이렇게 사용을 하셨다
'코드 > PHP' 카테고리의 다른 글
[PHP] 체크박스를 배열로 참조 (0) | 2015.08.26 |
---|---|
[MySql]MySql Pagination, 페이지 리스팅 (0) | 2015.08.13 |
[PHP] 특수한 상수들 (0) | 2015.08.07 |
[MySql]외래키, Foreign Key 설정 (0) | 2015.08.03 |
[정규표현식]IP 주소찾기 (0) | 2015.07.30 |