PHP
PDO를 사용할때 mysql_num_rows 같은 함수가 없다...ㅜㅜ
작은0악마
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을 지정할 수 도 있지만....