https://xetown.com/questions/1816108
$oDB = \DB::getInstance();
$result = $oDB->query('SELECT MAX(`num`) AS `last_num` FROM `test`;');
$data = $oDB->fetch($result);
$oDB->fetch()는 XE와 최소한의 호환성을 유지하기 위해 존재하는 메소드로, 데이터의 갯수에 따라 반환값 타입이 달라지기 때문에 유지보수나 코드 재사용시 버그 발생 확률이 높아집니다. 특정한 상황에서 코드가 좀더 간결해지긴 하지만, 그래도 신규 자료나 예제 코드에서는 사용하지 않는 것을 추천합니다.
($result를 받아왔는데 이걸 또 $oDB에 넘긴다는 것 자체가 OOP 도입 이전 90년대식 코딩 스타일입니다. $result를 받아왔으면 $result에다가 메소드를 호출해야지요.)
라이믹스 2.x의 DB 관련 기능들은 순정 PHP의 PDO를 확장한 것이므로, 커스텀 쿼리를 사용하더라도 PDO 방식 그대로 $result->fetchObject()->last_num, $result->fetchAll()[0]->last_num, $result->fetchColumn() 등으로 결과에 접근하면 됩니다.
fetch()
fetchAll()
fetchObject()
fetchColumn()
fetchArray()
fetch()
ASSOC
)로 반환.PDO::FETCH_ASSOC
가 기본값이지만, PDO::FETCH_OBJ
, PDO::FETCH_NUM
등 옵션 지정 가능.예시
$result = $oDB->query('SELECT * FROM test;');
$row = $result->fetch(); // 기본적으로 연관 배열 반환
echo $row['column_name'];
fetch(PDO::FETCH_OBJ)
를 사용하면 객체 형태로 받을 수도 있음
$row = $result->fetch(PDO::FETCH_OBJ);
echo $row->column_name;
fetchAll()
예시
$result = $oDB->query('SELECT * FROM test;');
$rows = $result->fetchAll(); // 모든 행을 연관 배열로 가져옴
foreach ($rows as $row) {
echo $row['column_name'];
}
객체 배열로 받을 수도 있음
$rows = $result->fetchAll(PDO::FETCH_OBJ);
foreach ($rows as $row) {
echo $row->column_name;
}
fetchObject()
fetch(PDO::FETCH_OBJ)
와 동일.예시
$result = $oDB->query('SELECT * FROM test;');
$row = $result->fetchObject();
echo $row->column_name;
fetchColumn()
COUNT(*)
, MAX(num)
, SUM(price)
같은 단일 값 쿼리에서 유용함.$count = $result->fetchColumn();
echo $count;
특정 컬럼을 지정할 수도 있음 (0
부터 시작하는 인덱스).
$result = $oDB->query('SELECT column1, column2 FROM test;');
$value = $result->fetchColumn(1); // column2 값 가져오기
echo $value;
fetchArray()
(라이믹스 확장 기능)fetch(PDO::FETCH_BOTH)
와 비슷함.$row = $result->fetchArray();
echo $row['column_name']; // 연관 배열 접근
echo $row[0]; // 숫자 인덱스 접근
메서드 | 반환 형식 | 특징 | 추천 사용 사례 |
---|---|---|---|
fetch() | 단일 행(배열 또는 객체) | 기본적으로 연관 배열 반환 | 한 개의 행만 필요할 때 |
fetchAll() | 다중 행(배열) | 모든 결과를 한 번에 가져옴 | 여러 개의 행이 필요할 때 |
fetchObject() | 단일 행(객체) | 객체로 반환 | 특정 테이블의 데이터를 객체처럼 다룰 때 |
fetchColumn() | 단일 값 | 첫 번째 컬럼 값만 가져옴 | COUNT, SUM, MAX 같은 집계 쿼리 |
fetchArray() | 단일 행(배열) | 연관 배열 + 숫자 인덱스 배열 | XE 스타일로 데이터 다룰 때 |
코드예제비교
// MAX(num) 값 가져오기 예제
// ❌ 잘못된 방식 (호환성을 위해 존재하지만 추천되지 않음)
$oDB = \DB::getInstance();
$result = $oDB->query('SELECT MAX(num) AS last_num FROM test;');
$data = $oDB->fetch($result); // fetch() 사용 비추천
echo $data['last_num'];
// ✅ 추천 방식 (fetchColumn 사용)
$result = $oDB->query('SELECT MAX(num) FROM test;');
$last_num = $result->fetchColumn();
echo $last_num;
위처럼 fetchColumn()
을 사용하면 더 간결하고 명확한 코드가 됩니다.