PHPのPDO(PHP Data Objects)とは?安全で柔軟なデータベース接続方法
PDO(PHP Data Objects) は、PHPでデータベースと接続・操作するための統一されたインターフェースです。
MySQL、SQLite、PostgreSQLなど複数のDBに対応し、セキュアかつ効率的なデータベース操作を行うことができます。
PDOの特徴
- 複数のデータベースに対応(MySQL、SQLite、PostgreSQLなど)
- プリペアドステートメントによるSQLインジェクション対策
- オブジェクト指向のコードが書ける
- エラー処理が柔軟(例外によるハンドリング)
PDOでMySQLに接続する基本構文
<?php
$dsn = "mysql:host=localhost;dbname=testdb;charset=utf8";
$user = "dbuser";
$pass = "password";
try {
$pdo = new PDO($dsn, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "接続成功";
} catch (PDOException $e) {
echo "接続失敗:" . $e->getMessage();
}
?>
データの取得(SELECT)
$stmt = $pdo->query("SELECT * FROM users");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row["name"] . "<br>";
}
プリペアドステートメント(バインド付き)
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->bindValue(":id", 1, PDO::PARAM_INT);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
プリペアドステートメントを使うことで、SQLインジェクションのリスクを大幅に低減できます。
データの挿入(INSERT)
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute([
":name" => "山田太郎",
":email" => "taro@example.com"
]);
エラーモード設定
例外モードにすることで、エラー時にPDOException
が投げられ、try-catch
で制御できます。
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
トランザクション処理
$pdo->beginTransaction();
try {
// 複数のクエリ
$pdo->exec("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
$pdo->exec("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
$pdo->commit();
} catch (Exception $e) {
$pdo->rollBack();
echo "エラー:" . $e->getMessage();
}
まとめ
- PDOは複数のDBに対応した共通インターフェース
- プリペアドステートメントで安全なSQLが書ける
- 例外によるエラーハンドリングが可能
- fetch()で柔軟なデータ取得
- トランザクションにも対応
PDOを使うことで、安全性・保守性に優れたデータベース処理が可能になります。
初心者のうちからPDOを基本として身につけておくと、将来の開発にも役立ちます。