2014. 9. 17. 10:15

최근 프로젝트는 PDO를 사용할 수 밖에 없었다

 

그런데 PDO를 쓰다보니 두가지의 답답한 문제에 봉착했다.

 

1. PDO는 mysql_num_rows 와 같은 레코드셋의 row의 수를 가져올 수 있는 기능이 없다.

2. PDO는 mysql_data_seek 과 같은 레코드셋의 포인터를 이동할 수 있는 기능이 없다.

 

이를 해결하기 위해 구글링은 해본 결과 레코드셋을 배열에 저장하고 그 배열을 사용하는 방법이 제일 좋은것 같다.

 

간단한 코드는

 

$stmt 를 PDOStatement 라고 할때

 

$result_array = $stmt->fetchAll();

 

//레코드셋에 row가 있는지 확인

if(count($result_array)){

 

foreach($result_array as $row){

 

//여기서 필요한 처리를 진행...

 

}

 

}

 

위와 같이 하면 $result_array 배열의 인덱스를 가지고 위치도 옮겨 다닐수 있고 순차 처리도 가능해지며 재사용이 가능하다.

 

참고로 fetchAll 메소드를 사용하면 $stmt>fetch(PDO::FETCH_BOTH )와 같은 방식으로 배열로 반환해주기 때문에

 

컬럼의 index나 name으로 다 사용이 가능하다.

 

물론 fetchAll()에 fetch style을 지정할 수 도 있지만....

 

Posted by 작은0악마