當前位置: 首頁> 最新文章列表> 使用PDOStatement::fetchObject 的自定義類來創建RESTful API

使用PDOStatement::fetchObject 的自定義類來創建RESTful API

gitbox 2025-05-29

在現代PHP 開發中, PDO (PHP Data Objects)提供了一個輕量且高效的數據庫訪問接口。而PDOStatement::fetchObject函數則可以幫助我們將數據庫查詢結果直接實例化為對象。結合自定義類使用,可以快速構建結構清晰的RESTful API。本篇文章將詳細介紹如何使用PDOStatement::fetchObject來實現這一目標。

在開發RESTful API 時,處理數據庫查詢結果通常需要一個清晰且可維護的方式。 PDOStatement::fetchObject允許我們直接將查詢結果轉成自定義類的實例,這樣不僅可以簡化代碼,還能提高整體架構的可讀性和可維護性。

下面我們通過一個完整示例,構建一個簡單的用戶(User)API。

第一步:創建數據庫和表

假設我們有一個users表,結構如下:

 CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL
);

並插入一些測試數據:

 INSERT INTO users (name, email) VALUES 
('Alice', '[email protected]'),
('Bob', '[email protected]');

第二步:定義用戶類(User.php)

這個類將用來映射數據庫查詢結果。

 class User
{
    public int $id;
    public string $name;
    public string $email;

    public function toArray(): array
    {
        return [
            'id'    => $this->id,
            'name'  => $this->name,
            'email' => $this->email,
        ];
    }
}

toArray方法方便我們將對象轉成數組格式,以便在API 中返回JSON。

第三步:建立數據庫連接(db.php)

 <?php
function getPDO(): PDO
{
    $dsn = 'mysql:host=localhost;dbname=api_example;charset=utf8mb4';
    $username = 'root';
    $password = '';

    return new PDO($dsn, $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    ]);
}
?>

第四步:編寫API 入口文件(api.php)

 <?php
require 'db.php';
require 'User.php';

// 設置響應頭
header('Content-Type: application/json');

$pdo = getPDO();

// 獲取用戶ID,如果有的話
$id = $_GET['id'] ?? null;

if ($id) {
    // 獲取單個用戶
    $stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
    $stmt->execute(['id' => $id]);
    $user = $stmt->fetchObject('User');

    if ($user) {
        echo json_encode($user->toArray());
    } else {
        http_response_code(404);
        echo json_encode(['error' => 'User not found']);
    }
} else {
    // 獲取所有用戶
    $stmt = $pdo->query('SELECT * FROM users');
    $users = [];
    while ($user = $stmt->fetchObject('User')) {
        $users[] = $user->toArray();
    }
    echo json_encode($users);
}
?>

第五步:測試API

啟動你的本地服務器,例如使用PHP 內置服務器:

 php -S localhost:8000

然後訪問以下地址測試:

在真實部署中,你可以將服務器地址替換成自己的域名,例如:

 https://api.gitbox.net/api.php?id=1

小結

通過PDOStatement::fetchObject ,我們可以非常優雅地將數據庫記錄映射成自定義對象,進而簡化RESTful API 的開發流程。搭配好面向對象設計,不僅能讓項目更加模塊化,還能讓後續擴展(如添加驗證、序列化規則)變得更容易。