PHP에서 PDO는 강력하고 유연한 데이터베이스 액세스 도구입니다. SQL 쿼리를 실행하고 pdostatement 객체를 통해 반환 된 데이터를 처리하는 여러 가지 방법을 제공합니다. 이 기사에서는 익명 클래스와 결합하여 pdostatement :: fetchobject 메소드를 사용하여 데이터베이스 쿼리 결과의 반환 객체를 사용자 정의하는 방법을 살펴 봅니다.
pdostatement :: fetchObject는 pdo가 쿼리 결과의 각 데이터 행을 객체로 변환하기 위해 제공하는 메소드입니다. 기본적으로 설정 세트의 각 행을 표준 PHP 객체 (STDCLASS)로 변환합니다. 그러나 필요에 따라 반환 된 객체를 사용자 정의하려면 FetchObject를 통해 수행 할 수 있습니다.
PHP 7은 익명 클래스의 개념을 소개하여 클래스 이름을 명시 적으로 정의하지 않고 클래스를 만들 수 있습니다. 이는 쿼리 결과에서 특정 사용자 정의 객체를 반환하는 데 많은 유연성을 제공합니다. PDOSTATEMENT :: FetchObject 와 함께 익명 클래스를 사용하여 반환 된 객체의 사용자 정의를 구현할 수 있습니다.
ID , 이름 및 이메일 필드가 포함 된 데이터베이스 테이블 사용자가 있다고 가정합니다. PDO를 사용하여 쿼리를 실행하고 익명 클래스를 통해 반환 된 객체 형식을 사용자 정의합니다.
<?php
// 데이터베이스 연결을 구성하십시오
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'root';
$password = '';
try {
// 만들다 PDO 예
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 쿼리를 실행하십시오
$stmt = $pdo->query("SELECT id, name, email FROM users");
// 사용 fetchObject 익명 클래스는 결과를 반환합니다
while ($user = $stmt->fetchObject(function($data) {
// 사용자 정의 익명 클래스 객체를 반환하십시오
return new class($data) {
public $id;
public $name;
public $email;
public function __construct($data) {
$this->id = $data->id;
$this->name = $data->name;
$this->email = $data->email;
}
// 사용자 정의 메소드를 추가하십시오
public function getFullName() {
return strtoupper($this->name);
}
};
})) {
// 각 사용자에 대한 정보를 인쇄하십시오
echo "User ID: {$user->id}, Name: {$user->getFullName()}, Email: {$user->email}\n";
}
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
데이터베이스 연결 : new pdo () 를 통해 데이터베이스 연결 인스턴스를 작성하고 오류 모드를 pdo :: errmode_exception 으로 설정하여 예외를 던집니다.
쿼리 실행 : $ pdo-> query () 메소드를 사용하여 SQL 쿼리를 실행하고 사용자 테이블에서 ID , 이름 및 이메일 필드를 선택합니다.
사용자 정의 익명 클래스 : FetchObject 메소드에서 익명 클래스 생성자를 전달하여 각 데이터 행을 받아들이고 쿼리 결과를 기반으로 사용자 정의 객체를 만듭니다.
사용자 정의 방법 : 익명 클래스에서는 사용자 이름의 대문자를 반환하는 getfullname () 과 같은 몇 가지 사용자 정의 메소드를 정의 할 수 있습니다.
출력 결과 : 사용자 데이터를 하나씩 while 루프로 얻고 각 사용자의 ID , 이름 ( GetFullName () 로 처리) 및 이메일을 인쇄합니다.
유연성 높은 유연성 : 익명 클래스를 사용하면 필요에 따라 반환 된 객체를 유연하게 사용자 정의하고 각 쿼리에 추가 방법을 추가 할 수도 있습니다.
단순성 : 코드는 비교적 간결하며 각 쿼리 결과를 처리하여 클래스를 명시 적으로 정의하여 보일러 플레이트 코드를 줄일 필요가 없습니다.
확장 성 : 언제든지 익명 클래스를 수정하고 쿼리 로직을 변경하거나 새 클래스 파일을 만들지 않고도 새로운 속성 및 메소드를 추가 할 수 있습니다.