현재 위치: > 최신 기사 목록> pdostatement :: fetchObject에서 dateTime 형식을 처리하는 방법

pdostatement :: fetchObject에서 dateTime 형식을 처리하는 방법

gitbox 2025-05-12

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 클래스로 수동으로 변환해야합니다.

날짜 및 시간 필드를 올바르게 처리하는 방법

우아하게 처리하는 두 가지 일반적인 방법이 있습니다.

방법 1 : 수동으로 필드를 변환합니다

객체를 얻은 후 즉시 날짜 필드를 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');
?>

이 방법은 간단하지만 매번 수동으로 변환해야합니다 . 테이블 구조가 복잡하거나 많은 필드가 있으면 유지 보수 비용이 증가합니다.

방법 2 : 사용자 정의 엔티티 클래스 사용 (권장)

엔티티 클래스를 작성하고 해당 속성 유형을 정의하며 생성자의 날짜와 시간을 자동으로 처리합니다.

 <?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 사용 팁에 대해 더 알고 싶다면 공식 문서를 참조하십시오.