pdostatement :: FetchObject는 데이터베이스 개발에 PHP의 PDO를 사용할 때 매우 실용적인 기능입니다. 쿼리 결과를 기존의 연관 배열 또는 인덱스 어레이 대신 객체에 직접 매핑 할 수 있습니다. 매개 변수 구성 및 실제 애플리케이션을 이해하면 코드가 명확하고 객체 지향적이며 유지 보수를 향상시킬 수 있습니다.
이 기사는 심층적으로 설명합니다.
FetchObject 의 역할
매개 변수에 대한 자세한 설명
일반적인 사용 시나리오 및 예방 조치
샘플 코드 데모
일반적으로 SQL 쿼리를 실행 한 후 Fetch 메소드를 사용하여 배열, 연관 배열, 객체 등이 될 수있는 결과 행을 얻을 수 있습니다. FetchObject는 쿼리 결과를 지정된 클래스 인스턴스 로 직접 캡슐화합니다.
요컨대, 강성 데이터 대신 데이터베이스에서 직접 "살아있는 개체"를 가져올 수 있습니다.
FetchObject 의 기본 서명은 다음과 같습니다.
public PDOStatement::fetchObject(?string $class = "stdClass", array $constructorArgs = []): object|false
매개 변수 설명 :
매개 변수 | 설명 |
---|---|
$ 클래스 | 선택적으로 클래스 이름을 인스턴스화하도록 지정하십시오. 기본값은 stdClass 입니다. 자신의 모델 클래스가있는 경우 여기에서 지정할 수 있습니다. |
$ constructorargs | 선택적 , 생성자 매개 변수 배열. 클래스를 인스턴스화 할 때 매개 변수를 전달하는 데 사용됩니다. |
반품 값 :
성공하면 물체를 반환합니다.
실패시 False를 반환합니다.
클래스 이름을 지정하지 않고 가장 간단한 사용량 :
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->query('SELECT id, name, email FROM users');
$user = $stmt->fetchObject();
echo $user->name; // 출력 사용자 이름
?>
현재 $ user 는 stdclass 객체이며 속성은 데이터베이스 필드에 해당합니다.
사용자 수업이 있다고 가정합니다.
<?php
class User {
public $id;
public $name;
public $email;
public function greet() {
return "Hello, {$this->name}!";
}
}
?>
FetchObject를 사용하여 데이터베이스 행을 사용자 클래스 객체로 전환하십시오.
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->query('SELECT id, name, email FROM users');
$user = $stmt->fetchObject(User::class);
echo $user->greet(); // 산출 "Hello, xxx!"
?>
이것은 데이터를 얻을뿐만 아니라 객체 지향 디자인과 더 일치하는 객체 메소드를 직접 호출 할 수 있습니다.
클래스가 생성자가 있고 매개 변수를 전달 해야하는 경우 다음과 같이 사용할 수 있습니다.
<?php
class UserWithConstructor {
public $id;
public $name;
public $email;
public function __construct($prefix) {
$this->name = $prefix . $this->name;
}
}
?>
호출 할 때 생성자 매개 변수를 전달합니다.
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->query('SELECT id, name, email FROM users');
$user = $stmt->fetchObject(UserWithConstructor::class, ['Mr. ']);
echo $user->name; // 산출 "Mr. xxx"
?>
? 주목해야 할 것
데이터베이스가 검색 한 필드는 객체에 할당 된 다음 생성자가 호출됩니다. 이는 생성자에 액세스 한 속성이 데이터베이스에서 지정된 값임을 의미합니다.
클래스의 필드 이름과 속성이 일치하지 않으면 추가 처리가 필요하거나 사용자 정의 메소드가 수동으로 바인딩하는 데 사용됩니다.
지정된 ID로 사용자 객체를 반환하는 API를 만들려고한다고 가정하십시오. 샘플 코드는 다음과 같습니다.
<?php
// 매개 변수를 얻으십시오
$id = $_GET['id'] ?? 1;
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->prepare('SELECT id, name, email FROM users WHERE id = :id');
$stmt->execute(['id' => $id]);
$user = $stmt->fetchObject(User::class);
if ($user) {
header('Content-Type: application/json');
echo json_encode($user);
} else {
header("Location: https://gitbox.net/error/user-not-found");
}
?>
사용자가 발견되면 API는 JSON 객체를 반환합니다. 찾을 수없는 경우 gitbox.net 의 오류 페이지로 이동합니다.
FetchObject 는 특히 MVC 패턴과 결합 될 때 객체 지향 개발 에 적합합니다.
$ class 및 $ constructorargs를 사용하는 데 능숙하면 필기 할당 코드를 줄이고 개발 효율성을 향상시키는 데 도움이 될 수 있습니다.
그러나 참고 : 클래스 속성 및 데이터베이스 필드가 일치하지 않으면주의하십시오.