그누보드 sql_fetch_all() 함수 추가 > 그누보드5 팁자료실

그누보드5 팁자료실

그누보드 sql_fetch_all() 함수 추가 정보

그누보드 sql_fetch_all() 함수 추가

본문

그누보드5(5.3, 5.4, 4 동일) 에 sql관련 함수들이 있는데,

쿼리 전체 결과를 리턴하는 함수가 없습니다. (pdo 에서 fetchAll() 함수 같은)

 

테이블 row단위로 반복요청을 보내는 방식을 쓰는데, 코드간에 결합도가 높아져서 추가 기능을 넣게 되면,

코드가 많이 지저분해집니다.(이런 코드는 유지보수에서 안 좋습니다.)

 

물론 각각의 기능에서 fetch loop를 통해서 전체rows를 가져온다음  다시 반복문을 사용해도 되나

이러면 각 페이지마다 중복 코드가 발생하게 되죠. 

lib/common.lib.php에서 이 기능을 제공하면 깔끔해집니다.

 

5.4 버전 기준으로 만든 코드입니다. 5.3도 별로 차이 없을것 같네요.

 


// 쿼리를 실행한 후 결과값에서 모든행을 얻는다.
function sql_fetch_all($sql, $error=G5_DISPLAY_SQL_ERROR, $link=null)
{
    global $g5;
    if(!$link)
        $link = $g5['connect_db'];
    $rows = array();
    $result = sql_query($sql, $error, $link);
    while(($row =  sql_fetch_array($result)) != null) {
    if(function_exists('mysqli_fetch_assoc') && G5_MYSQLI_USE)
            $row = @mysqli_fetch_assoc($result);
        else
            $row = @mysql_fetch_assoc($result);
        
        $rows[] = $row;
    }
    return $rows    ;
}

 

 

사용법은

sql_fetch($sql); 함수와 동일합니다.

 

$list = sql_fetch_all($sql);

 

foreach($list as $row) {

    //row 별로 작업..

}

 

그누보드5.4 공식 기능으로 추가해달라고 요청해두었습니다.

https://github.com/gnuboard/gnuboard5/pull/47/commits/b3d0edb1734e8b926a897d70569063e6e67902cc

그전까진 일단 common.lib.php에 추가해서 사용하세요.

 

이렇게 전체 데이타를 쿼리하는 함수가 있으면, 좀더 깔끔하고 심플한 코드를 추가할수 있게 됩니다.

 

 

 

 

 

추천
4

댓글 5개

mysqli_fetch_all 를 사용하면 됩니다 php 5.3 이상

그리고 위에 코드는 아래 4개 라인을 빼야 정상동작 합니다

if(function_exists('mysqli_fetch_assoc') && G5_MYSQLI_USE)
    $row = @mysqli_fetch_assoc($result);
else
    $row = @mysql_fetch_assoc($result);
전체 30 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT