코드/PHP

[PHP]Query 결과 재사용, 인덱스 리셋

Yeah-Panda 2015. 8. 13. 10:19

코딩을 하다보면

$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