当前位置: 首页> 最新文章列表> 使用 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 的开发流程。搭配好面向对象设计,不仅能让项目更加模块化,还能让后续扩展(如添加验证、序列化规则)变得更容易。