最新のPHP開発では、 PDO (PHPデータオブジェクト)は、軽量で効率的なデータベースアクセスインターフェイスを提供します。 pdostatement :: fetchObject関数は、データベースクエリの結果を直接オブジェクトにインスタンス化するのに役立ちます。カスタムクラスと組み合わせることで、十分に構造化されたRestful APIをすばやく構築できます。この記事では、pdostatement :: fetchObjectを使用してこれを達成する方法について詳しく説明します。
RESTFUL APIを開発する場合、データベースクエリの結果を処理するには、明確で保守可能な方法が必要になることがよくあります。 pdostatement :: fetchObjectを使用すると、クエリの結果をカスタムクラスのインスタンスに直接変換できます。これにより、コードを簡素化するだけでなく、アーキテクチャ全体の読みやすさと保守性も向上します。
以下に、完全な例を使用して、シンプルなユーザー(ユーザー)APIを作成します。
次の構造を持つユーザーテーブルがあるとします。
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]');
このクラスは、データベースクエリの結果をマップするために使用されます。
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を返すことができるように、オブジェクトを配列形式に変換することができます。
<?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,
]);
}
?>
<?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);
}
?>
内蔵PHPサーバーの使用など、ローカルサーバーを起動します。
php -S localhost:8000
次に、次のアドレスにアクセスしてテストします。
すべてのユーザーを取得: http:// localhost:8000/api.php
単一のユーザーを取得します。 IDは1: http:// localhost:8000/api.php?id = 1です
実際の展開では、サーバーアドレスを独自のドメイン名、たとえば次のように置き換えることができます。
https://api.gitbox.net/api.php?id=1
pdostatement :: FetchObjectを使用すると、データベースレコードを非常にエレガントにカスタムオブジェクトにマップすることで、RESTFUL APIの開発プロセスを簡素化できます。オブジェクト指向の設計により、プロジェクトをよりモジュール化するだけでなく、その後の拡張(検証やシリアル化ルールの追加など)も簡単になります。