PHP의 PDO를 사용하여 데이터베이스를 작동 할 때 PDOSTATEMENT :: FetchObject () 메소드는 매우 편리하며 쿼리 결과를 객체에 직접 매핑 할 수 있습니다. 그러나 데이터베이스 필드에 DATETIME , TIMESTAMP 유형과 같은)가 포함 된 경우, 날짜 필드가 일반 문자열로 처리되는 등 FetchObject를 사용하여 직접 문제가 발생하여 후속 서식 및 비교가 번거 롭습니다.
이 기사는 FetchObject를 사용할 때 이러한 DateTime 필드를 올바르게 처리하고 실제 예제를 제시하는 방법을 설명합니다.
사용자 테이블 사용자 가 있다고 가정하고 구조는 다음과 같습니다.
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL
);
데이터 삽입 :
INSERT INTO users (name, created_at) VALUES ('Alice', '2025-04-27 14:30:00');
FetchObject를 사용하여 데이터를 얻습니다.
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $pdo->query('SELECT * FROM users WHERE id = 1');
$user = $stmt->fetchObject();
echo $user->created_at;
?>
출력은 일반 문자열 입니다.
2025-04-27 14:30:00
create_at 에서 추가, 빼기, 형식 및 기타 작업을 추가하려면 DateTime 클래스로 수동으로 변환해야합니다.
우아하게 처리하는 두 가지 일반적인 방법이 있습니다.
객체를 얻은 후 즉시 날짜 필드를 dateTime 객체로 변환하십시오.
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $pdo->query('SELECT * FROM users WHERE id = 1');
$user = $stmt->fetchObject();
if ($user && isset($user->created_at)) {
$user->created_at = new DateTime($user->created_at);
}
// 이제 직접 사용할 수 있습니다 DateTime 방법
echo $user->created_at->format('Y년도m달d낮 H:i:s');
?>
이 방법은 간단하지만 매번 수동으로 변환해야합니다 . 테이블 구조가 복잡하거나 많은 필드가 있으면 유지 보수 비용이 증가합니다.
엔티티 클래스를 작성하고 해당 속성 유형을 정의하며 생성자의 날짜와 시간을 자동으로 처리합니다.
<?php
class User
{
public int $id;
public string $name;
public DateTime $created_at;
public function __construct()
{
// 원래 문자열을 추가해야합니다 created_at 변환 DateTime 물체
if (is_string($this->created_at)) {
$this->created_at = new DateTime($this->created_at);
}
}
}
?>
FetchObject를 사용할 때 클래스 이름을 지정하십시오.
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $pdo->query('SELECT * FROM users WHERE id = 1');
$user = $stmt->fetchObject(User::class);
echo $user->created_at->format('Y-m-d H:i:s');
?>
이 작업의 이점은 다음과 같습니다.
코드는 명확합니다
현장 처리 누락을 피하십시오
객체 구조가보다 표준화되어 IDE가 자동으로 완료되도록 쉽게 만듭니다.
대규모 프로젝트 또는 장기 유지 보수에 적합합니다
PHP 버전에서 지원하는 경우 PHP 8.0에 도입 된 생성자 속성 프로모션과 같은 속성 유형 선언을 결합하여 엔티티 클래스의 쓰기를 더욱 단순화 할 수 있습니다.
동시에, 데이터베이스에서 반환 한 필드 형식이 DateTime 파싱 실패를 피하기 위해 항상 ISO 표준 ( YYYY-MM-DD HH : MM : SS )을 준수하는지 확인하십시오.
pdostatement :: fetchObject ()를 사용할 때 직접 반환 된 날짜 및 시간 필드는 문자열입니다. 우아한 치료가 필요한 경우 다음에 권장됩니다.
제거 후 작은 품목을 DateTime 으로 수동으로 변환 할 수 있습니다.
대규모 프로젝트 또는 표준화 된 개발에서는 사용자 정의 엔티티 클래스를 사용하는 것이 좋습니다.
입체 클래스를 합리적으로 설계함으로써 코드의 견고성과 유지 가능성을 크게 향상시킬 수 있습니다.
PDO 사용 팁에 대해 더 알고 싶다면 공식 문서를 참조하십시오.