現在の位置: ホーム> 最新記事一覧> pdostatementのカスタムクラスを使用してRESTFUL APIを作成します:: fetchObject

pdostatementのカスタムクラスを使用してRESTFUL APIを作成します:: fetchObject

gitbox 2025-05-29

最新のPHP開発では、 PDO (PHPデータオブジェクト)は、軽量で効率的なデータベースアクセスインターフェイスを提供します。 pdostatement :: fetchObject関数は、データベースクエリの結果を直接オブジェクトにインスタンス化するのに役立ちます。カスタムクラスと組み合わせることで、十分に構造化されたRestful APIをすばやく構築できます。この記事では、pdostatement :: fetchObjectを使用してこれを達成する方法について詳しく説明します。

RESTFUL APIを開発する場合、データベースクエリの結果を処理するには、明確で保守可能な方法が必要になることがよくあります。 pdostatement :: fetchObjectを使用すると、クエリの結果をカスタムクラスのインスタンスに直接変換できます。これにより、コードを簡素化するだけでなく、アーキテクチャ全体の読みやすさと保守性も向上します。

以下に、完全な例を使用して、シンプルなユーザー(ユーザー)APIを作成します。

ステップ1:データベースとテーブルを作成します

次の構造を持つユーザーテーブルがあるとします。

 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]');

ステップ2:ユーザークラス(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を返すことができるように、オブジェクトを配列形式に変換することができます。

ステップ3:データベース接続を確立する(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,
    ]);
}
?>

ステップ4: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);
}
?>

ステップ5:APIをテストします

内蔵PHPサーバーの使用など、ローカルサーバーを起動します。

 php -S localhost:8000

次に、次のアドレスにアクセスしてテストします。

実際の展開では、サーバーアドレスを独自のドメイン名、たとえば次のように置き換えることができます。

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

まとめ

pdostatement :: FetchObjectを使用すると、データベースレコードを非常にエレガントにカスタムオブジェクトにマップすることで、RESTFUL APIの開発プロセスを簡素化できます。オブジェクト指向の設計により、プロジェクトをよりモジュール化するだけでなく、その後の拡張(検証やシリアル化ルールの追加など)も簡単になります。