當前位置: 首頁> 最新文章列表> PDOStatement::fetchAll函數結合PDO::FETCH_OBJ選項,如何實現對象形式的數據返回

PDOStatement::fetchAll函數結合PDO::FETCH_OBJ選項,如何實現對象形式的數據返回

gitbox 2025-06-07

使用PDOStatement::fetchAllPDO::FETCH_OBJ

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 或響應層結構時顯得尤為方便。


注意事項

  1. 字段名一致性:對象方式返回的屬性名依賴於數據庫字段名,因此字段命名規範非常重要,建議使用英文小寫並以下劃線分隔。

  2. 性能考量fetchAll()會一次性加載所有數據,適用於結果集不大的情況。如果數據量龐大,建議使用fetch()配合循環按行處理。

  3. 擴展模型類時的局限:雖然使用FETCH_OBJ返回的是對象,但它是一個stdClass實例,若要返回自定義類對象,可使用PDO::FETCH_CLASS