그누보드 sql_fetch_all() 함수 추가

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

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

 

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

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

 

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

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

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

 

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

 

[code]

// 쿼리를 실행한 후 결과값에서 모든행을 얻는다.
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    ;
}

[/code]

 

 

사용법은

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에 추가해서 사용하세요.

 

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

 

 

 

 

 

|

댓글 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);
댓글을 작성하시려면 로그인이 필요합니다.

그누보드5 팁자료실

+
제목 글쓴이 날짜 조회
6년 전 조회 5,311
6년 전 조회 7,318
6년 전 조회 4,205
6년 전 조회 4,490
6년 전 조회 3,357
6년 전 조회 5,457
6년 전 조회 4,074
6년 전 조회 4,452
6년 전 조회 3,634
6년 전 조회 3,665
6년 전 조회 3,957
6년 전 조회 5,693
6년 전 조회 7,725
6년 전 조회 5,239
6년 전 조회 4,958
6년 전 조회 5,196
6년 전 조회 4,074
6년 전 조회 5,026
6년 전 조회 3,143
6년 전 조회 6,441
6년 전 조회 5,955
6년 전 조회 1.2만
6년 전 조회 5,183
6년 전 조회 4,153
6년 전 조회 4,802
6년 전 조회 4,738
6년 전 조회 3,506
6년 전 조회 3,699
6년 전 조회 5,191
6년 전 조회 5,375