PHPでは、PDO(PHPデータオブジェクト)は、データベースにアクセスするための軽量データベース抽象化レイヤーです。 PDOを使用すると、さまざまなSQLクエリを簡単に実行でき、MySQL、PostgreSQL、SQLiteなどのさまざまなデータベースシステムをサポートできます。PDOSTATEMENT :: FETCHOBJECT関数は、PDOが提供する非常に強力な方法です。クエリの結果をカスタムPHPオブジェクトに直接マッピングできます。
pdostatement :: fetchObjectは、データベースクエリの結果からレコードの列を取得し、それらをオブジェクトにマッピングする関数です。 Fetchメソッドとは異なり、 FetchObjectは連想配列またはインデックス配列ではなくオブジェクトを返します。デフォルトでは、返されたオブジェクトはタイプSTDCLASSですが、クエリの結果をカスタムクラス名を渡すことでカスタムオブジェクトにマッピングできます。
まず、基本的なPDOを使用してデータベースに接続してクエリを実行し、 FetchObjectを使用してクエリ結果を取得し、 STDCLASSオブジェクトを返します。
<?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$stmt = $pdo->query('SELECT * FROM users');
while ($row = $stmt->fetchObject()) {
echo $row->name . "\n"; // クエリテーブルに1つがあるとします name フィールド
}
?>
この例では、 $ rowはstdclassオブジェクトになり、オブジェクトのプロパティにアクセスできるのと同じように、データベースレコードのフィールドにアクセスできます。
クエリの結果を特定のクラスオブジェクトにマップする場合は、 fetchObjectのクラスの名前を渡すことができます。クエリの結果を処理するためにカスタムクラスを使用する方法は次のとおりです。
<?php
class User {
public $id;
public $name;
public $email;
public function __construct($id, $name, $email) {
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
}
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$stmt = $pdo->query('SELECT id, name, email FROM users');
while ($user = $stmt->fetchObject('User')) {
echo "ID: " . $user->id . " Name: " . $user->name . " Email: " . $user->email . "\n";
}
?>
この例では、 fetchObject( 'user')はクエリ結果をユーザークラスのオブジェクトにマップします。データの各行はユーザーオブジェクトを作成し、オブジェクトプロパティを介してデータに直接アクセスできます。
デフォルトでは、 FetchObjectはクエリ結果のフィールドを直接使用してオブジェクトのプロパティを設定します。クラスにコンストラクターがある場合、PDOはコンストラクターパラメーターを無視します。この場合、 pdostatement :: setFetchModeメソッドを使用してこの問題を解決できます。たとえば、コンストラクターを介してオブジェクトを初期化する場合は、次の方法を使用できます。
<?php
class User {
public $id;
public $name;
public $email;
public function __construct($id, $name, $email) {
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
}
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$stmt = $pdo->query('SELECT id, name, email FROM users');
$stmt->setFetchMode(PDO::FETCH_CLASS, 'User');
while ($user = $stmt->fetch()) {
echo "ID: " . $user->id . " Name: " . $user->name . " Email: " . $user->email . "\n";
}
?>
PDO :: fetch_classを設定することにより、データを取得するときにカスタムコンストラクターを使用してオブジェクトを初期化する必要があることをPDOに伝えます。
pdostatement :: fetchObjectを使用すると、クエリ結果をオブジェクトに簡単にマッピングできます。
デフォルトでは、 FetchObjectはSTDCLASSオブジェクトを返しますが、クラス名を指定して、クエリ結果をカスタムPHPクラスオブジェクトにマッピングすることもできます。
コンストラクターを介してオブジェクトを初期化する必要がある場合は、 SetFetchModeメソッドを使用してPDO :: FETCH_CLASSモードを指定できます。
pdostatement :: FetchObjectを使用すると、より便利にデータベースクエリの結果を操作し、オブジェクト指向の方法でデータを処理できます。