pdostatement :: fetchallは、PDostatementクラスのメソッドであり、結果セットのすべての行を一度に取得できます。 PDO :: FETCH_OBJで使用すると、各行がオブジェクトとして返され、各列の値がオブジェクトの属性になります。
この方法の構文は次のとおりです。
<?php
$dsn = 'mysql:host=localhost;dbname=gitbox_net_db;charset=utf8mb4';
$username = 'your_username';
$password = 'your_password';
try {
$pdo = new PDO($dsn, $username, $password);
$sql = 'SELECT id, name, email FROM users';
$stmt = $pdo->query($sql);
$results = $stmt->fetchAll(PDO::FETCH_OBJ);
foreach ($results as $user) {
echo "ID: " . $user->id . "<br>";
echo "Name: " . $user->name . "<br>";
echo "Email: " . $user->email . "<br><br>";
}
} catch (PDOException $e) {
echo "Database error: " . $e->getMessage();
}
?>
上記のコードでは、データベース接続情報は想定されるドメイン名gitbox.netを使用し、データベース名はgitbox_net_dbです。クエリによって返されるデータの各行はオブジェクトに変換され、フィールドデータはオブジェクトプロパティを介して直接アクセスされ、コード構造をより明確にします。
デフォルトでは、パラメーターが渡されない場合、 fetchall()はインデックス配列を返します。 PDO :: FETCH_OBJを使用すると、オブジェクトの配列が返されます。例えば:
// デフォルトで連想配列を返します
$results = $stmt->fetchAll(); // に相当 fetchAll(PDO::FETCH_BOTH)
echo $results[0]['name']; // 配列を介したアクセス
// オブジェクトを返します
$results = $stmt->fetchAll(PDO::FETCH_OBJ);
echo $results[0]->name; // オブジェクトを介したアクセス
オブジェクトアプローチは、特にサービスレイヤー、DTO、または応答層構造を構築する場合、多くのオブジェクト指向の開発者の思考モデルに近いものです。
フィールド名の一貫性:オブジェクトメソッドによって返される属性名は、データベースのフィールド名に依存するため、フィールドの命名仕様は非常に重要です。英語の小文字を使用し、分離を強調することをお勧めします。
パフォーマンスの考慮事項: fetchall()はすべてのデータを一度にロードします。これは、結果セットが大きくない状況に適しています。データボリュームが膨大な場合は、 fetch()を使用してループを備えた行に従って処理することをお勧めします。
制限モデルクラスを拡張する場合: FETCH_OBJはオブジェクトを返しますが、 STDCLASSのインスタンスです。カスタムクラスオブジェクトを返すには、 PDO :: fetch_classを使用します。