현재 위치: > 최신 기사 목록> pdostatement를 사용할 때 데이터베이스에서 null 값을 처리하는 방법 :: FetchObject

pdostatement를 사용할 때 데이터베이스에서 null 값을 처리하는 방법 :: FetchObject

gitbox 2025-05-12

데이터베이스 작업에 PHP의 PDO (PHP Data Objects)를 사용하는 경우 PDostatement :: FetchObject는 결과 세트를 객체에 직접 매핑하는 매우 편리한 방법입니다. 그러나 실제로 사용하면 데이터베이스에 NULL 값이 존재하는 상황을 종종 만나게됩니다. 처리되지 않은 상태로두면 이러한 NULL 값은 비즈니스 로직에서 예외 또는 예기치 않은 오류를 던질 수 있습니다.

이 기사에서는 FetchObject를 사용할 때 데이터베이스에서 NULL 값을 올바르게 처리하는 방법을 자세히 설명합니다.

FetchObject의 기본 사용

FetchObject는 쿼리 결과의 행을 반환하고 객체에 매핑합니다. 가장 간단한 예제 코드는 다음과 같습니다.

 <?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$stmt = $pdo->query('SELECT id, name, email FROM users WHERE id = 1');
$user = $stmt->fetchObject();

echo $user->name;

이 예에서는 이메일 필드가 데이터베이스에서 NULL 인 경우 $ USER-> 이메일NULL 입니다.

문제가 발생하는 곳

일반적으로 PHP는 NULL을 처리하는 데 느슨하지만 객체 속성, JSON 직렬화 또는 프론트 엔드에서 출력에서 ​​문자열 작업을 수행하려는 경우와 같은 특정 시나리오에서는 NULL이 문제를 일으킬 수 있습니다. 예를 들어:

 echo strlen($user->email); // 오류를보고하십시오:strlen() expects parameter 1 to be string, null given

해결책 1 : 수동 감지 및 교체

가장 간단한 방법은 특성을 사용하기 전에 수동으로 감지하는 것입니다.

 $email = $user->email ?? '';
echo strlen($email);

PHP 7+에서 빈 병합 연산자 사용 ?? , null 일 때 기본값을 제공하는 것이 편리합니다.

해결책 2 : 통합 사후 처리

속성을 사용하는 모든 장소에서 판단을 추가하지 않으려면 다음과 같은 객체를 취한 후 통합 프로세스를 수행 할 수 있습니다.

 <?php
function sanitizeNulls($object) {
    foreach ($object as $key => $value) {
        if (is_null($value)) {
            $object->$key = '';
        }
    }
    return $object;
}

$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$stmt = $pdo->query('SELECT id, name, email FROM users WHERE id = 1');
$user = $stmt->fetchObject();
$user = sanitizeNulls($user);

echo strlen($user->email); // 现在不会오류를보고하십시오了

이 방법은 많은 객체 속성이 한 번에 균일하게 처리되는 시나리오에 적합합니다.

솔루션 3 : 사용자 정의 매핑 클래스

FetchObject를 사용하면 데이터를 수신 할 사용자 정의 클래스를 지정할 수 있습니다. NULL은 생성자 또는 사용자 정의 방법을 통해 자동으로 처리 할 수 ​​있습니다.

 <?php
class User {
    public $id;
    public $name;
    public $email;

    public function __construct() {
        foreach ($this as $key => $value) {
            if (is_null($value)) {
                $this->$key = '';
            }
        }
    }
}

$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$stmt = $pdo->query('SELECT id, name, email FROM users WHERE id = 1');
$user = $stmt->fetchObject('User');

echo strlen($user->email); // 也不会오류를보고하십시오

참고 : 사용자 정의 클래스를 사용하는 경우 객체 인스턴스화 후 지정된 속성 만 생성자를 통과 하므로이 방법은 일부 시나리오를 단순화하는 데 적합하지만 특히 복잡한 논리에는 적합하지 않습니다.

요약

pdostatement :: fetchObject를 사용하는 경우 데이터베이스에서 NULL 값을 만나는 것이 매우 일반적입니다.
일반적인 치료 방법은 다음과 같습니다.

  • 속성을 사용할 때마다 합병 판단을하십시오.

  • 함수를 사용하여 통일 된 방식으로 물체를 가로 지르고 모든 널을 기본값으로 변환하십시오.

  • 사용자 정의 클래스를 통한 중앙 집중식 처리.

실제 프로젝트 크기와 복잡성에 따라 가장 적합한 솔루션을 선택하면 코드가 더욱 강력하고 유지 관리 가능합니다.

Advanced PDO에 대해 자세히 알아 보려면 자세한 자습서 를 참조하십시오.