●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

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を基本として身につけておくと、将来の開発にも役立ちます。